ListView: 视图列表
1.使用ArrayAdapter, 只能为设置单个的textview
//1.查找listview
lv = (ListView) findViewById(R.id.lv);
tv = (TextView) findViewById(R.id.tv);
//设置ArrayAdapter
String[] arr = new String[] {"hello1", "hello2", "hello1", "hello2","hello1", "hello2","hello1", "hello2","hello1", "hello2","hello1", "hello2","hello1", "hello2"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv, arr );
lv.setAdapter(adapter);
//给listview的item加点击事件
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//拿指定条目上的数据
String s = (String) parent.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), s , 0).show();
}
});
2. SimpleAdapter 可以设置多个textview,但不支持其它view
List<Map<String, Object>> data = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "id" + i);
map.put("name", "name" + i);
map.put("number", "number" + i);
data.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_simple,
new String[]{"id", "name", "number"},
new int[]{R.id.tv_id, R.id.tv_name, R.id.tv_number}) {
};
lv.setAdapter(adapter );
//item点击事件
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Map<String, Object> map = (Map<String, Object>)parent.getItemAtPosition(position);
String name = map.get("name").toString();
Toast.makeText(getApplicationContext(),name , 0).show();
}
3.BaseAdapter 使用,并使用ViewHolder进行控件的利用。
BaseAdapter baseAdapter = new BaseAdapter() {
@Override
public long getItemId(int position) {
return 0;
}
// 返回数据在ontemClick中parent.getItemAtPosition返回的值
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public int getCount() {
return data.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
Map<String, String> map = data.get(position);
ViewHolder holder;
if (convertView != null) {
// view利用
view = convertView;
holder = (ViewHolder) convertView.getTag();
} else {
view = View.inflate(BaseAdapterActivity.this,
R.layout.item_simple, null);
holder = new ViewHolder();
holder.tvId = (TextView) view.findViewById(R.id.tv_id);
holder.tvName = (TextView) view.findViewById(R.id.tv_name);
holder.tvNumber = (TextView) view
.findViewById(R.id.tv_number);
view.setTag(holder);
}
holder.tvId.setText(map.get("id").toString());
holder.tvName.setText(map.get("name"));
holder.tvNumber.setText(map.get("number"));
return view;
}
};
lv.setAdapter(baseAdapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Map<String, String> map = data.get(position);
Map<String, String> map = (Map<String, String>) parent
.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), map.get("number"), 0)
.show();
}
});
}
// 使用viewHolder进行控件利用
class ViewHolder {
TextView tvId;
TextView tvName;
TextView tvNumber;
}