在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。
列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
1、ArrayAdapter
比较简单,就是单行字符串的,这里转载个例子:
/** * @author allin * */ public class MyListView extends Activity { private ListView listView; //private List<String> data = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); listView = new ListView(this); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData())); setContentView(listView); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("测试数据1"); data.add("测试数据2"); data.add("测试数据3"); data.add("测试数据4"); return data; } }
2、SimpleAdapter
扩展性最好的适配器,建议自己写一个demo感受下,以下为验证的一个demo(不需要响应按钮):
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button addDataBtn; private Button delDataBtn; private ListView mainListView; private List<Map<String, Object>> mainData; private SimpleAdapter adapter; private Random random; private int i; //创建ViewList并初始化数据和控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); random = new Random(); i = 0; addDataBtn = (Button) findViewById(R.id.addData); delDataBtn = (Button) findViewById(R.id.delData); addDataBtn.setOnClickListener(this); delDataBtn.setOnClickListener(this); mainData = new ArrayList<Map<String, Object>>(); //创建ViewList的数据 adapter = new SimpleAdapter(this, mainData, //将数据注册到adapter R.layout.vlistitem_main, //自定义的ViewList项目 new String[]{"title", "info", "img"}, //注册数据标签 new int[] {R.id.title1, R.id.info1, R.id.img}); //数据标签对应的ViewList中的控件ID,需要与上面一行一一对应; mainListView = (ListView) findViewById(R.id.listView); mainListView.setAdapter(adapter); //设置适配器
<span style="white-space:pre"> </span><pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><span style="color:#660e7a;"><strong><span style="white-space:pre"> </span>mainListView</strong></span>.setOnItemClickListener(<span style="color:#000080;"><strong>new </strong></span>AdapterView.OnItemClickListener() { <span style="white-space:pre"> </span><span style="color:#808000;">@Override </span><span style="color:#808000;"> <span style="white-space:pre"> </span></span><span style="color:#000080;"><strong>public void </strong></span>onItemClick(AdapterView<?> arg0, View arg1, <span style="color:#000080;"><strong>int </strong></span>arg2, <span style="color:#000080;"><strong>long </strong></span>arg3) { <span style="white-space:pre"> </span>Toast.<span style="font-style:italic;">makeText</span>(getApplicationContext(), <span style="color:#008000;"><strong>"你点击了第" </strong></span>+arg2 + <span style="color:#008000;"><strong>"行!"</strong></span>, Toast.<span style="color:#660e7a;"><strong><em>LENGTH_LONG</em></strong></span>).show();<span style="color:#808080;"><em> </em></span><span style="color:#808080;"><em> <span style="white-space:pre"> </span></em></span>} <span style="white-space:pre"> </span>});} //向ViewList数据中增加条目 private void addData(List<Map<String, Object>> data){ int tmpint = random.nextInt(100); i++; Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "G" + tmpint); map.put("info", "google " + tmpint); map.put("img", android.R.drawable.btn_default); data.add(map); } //随机删除ViewList数据中的条目 private void delData(List<Map<String, Object>> data){ if(i!=0) { int randomInt = random.nextInt(i); Toast.makeText(this, "i=" + i + ";randomInt=" + randomInt + ";", Toast.LENGTH_LONG).show(); data.remove(randomInt); i--; } } //增减数据条目按钮回调函数 @Override public void onClick(View v) { switch (v.getId()) { case R.id.addData: addData(mainData); adapter.notifyDataSetChanged(); //数据改变后,通知ViewList更新数据; break; case R.id.delData: delData(mainData); adapter.notifyDataSetChanged(); //数据改变后,通知ViewList更新数据; break; default: break; } }}
3、SimpleCursorAdapter
(未完待续)