ListView是Android中常用的控件之一,用于数据展示。因此需要提供数据供展示,但是数据部呢个直接传递给ListView,所以需要适配器进行传递。
1、简单的ListView使用
如果展示列表中不需要展示复杂的东西,则使用ArrayAdapter适配器就可以实现。实例如下:
(1)activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/list_view1" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>
在此布局中个ListView控件。
(2)MainActivity.java
package com.example.testviewlist; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private String[] viewListData = {"姓名:yy","微博:残缺的孤独","微信公众号:残缺的孤独","工作地:北京","感悟:要么强大,要么听话"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取ListView ListView listView = (ListView) findViewById(R.id.list_view1); //适配器 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, viewListData); //使用适配器传递数据 listView.setAdapter(adapter); //添加点击事件 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String info = viewListData[position]; Toast.makeText(MainActivity.this, info, Toast.LENGTH_SHORT).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
(3)结果展示
运行,见如下效果:
点击效果如下:
2、ListView之标题使用
使用SimpleAdapter适配器可以实现各种布局,扩展性好。使用SimpleAdapter时,数据一般是由HashMap组成的List,List每一行对应于ListView的一行。HashMap中的key-value数据映射到布局文件中对应的id组件上。接着上方继续修改。
(1)activity_main.xml
保持不变
(2)修改MainActivity.java
package com.example.testviewlist; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity extends Activity { // private String[] viewListData = {"姓名:yy","微博:残缺的孤独","微信公众号:残缺的孤独","工作地:北京","感悟:要么强大,要么听话"}; private String[] vl_title = {"姓名","微博","微信公众号","工作地","感悟"}; private String[] vl_info = {"yy","残缺的孤独","残缺的孤独","北京","要么强大,要么听话"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取ListView对象 ListView listView = (ListView) findViewById(R.id.list_view1); List<Map<String,Object>> listData= new ArrayList<Map<String,Object>>();; for(int i=0;i<vl_title.length;i++){ //组装Map数据 Map<String,Object> dataMap = new HashMap<String,Object>(); dataMap.put("title", vl_title[i]); dataMap.put("info", vl_info[i]); listData.add(dataMap); } //适配器 SimpleAdapter adapter = new SimpleAdapter(this,listData,android.R.layout.simple_list_item_2, new String[]{"title","info"},new int[]{android.R.id.text1,android.R.id.text2}); listView.setAdapter(adapter); //添加点击事件 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String title = vl_title[position]; String info = vl_info[position]; Toast.makeText(MainActivity.this, title + ": " + info, Toast.LENGTH_SHORT).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
在使用SimpleAdapter的此构造函数中:第一个参数为上下文,第二个参数为数据,第三个参数是布局文件,第四个参数为数据项的key,第五个参数为要填充的组件。
(3)效果
效果如下图展示: