在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
(未完待续)