ListView用来显示一个列表的控件,在开发中经常用到,介绍一下常用的ListView的用法:
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和 自定义Adapter(BaseAdapter):
1:ArrayAdapter 最简单的一种用法,通常用来展示单一的字符数据
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView listView;
private String[] data = new String[] { "java", "Android","C++", "JavaScript", "Php", "JSP" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
listView = (ListView) findViewById (R.id.listview);
// 数据适配器的定义 (ArrayAdapter)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
// 给ListView设置数据适配器
listView.setAdapter(adapter);
// 设置ListView的元素被选中时的事件处理监听器
listView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 获取点击ListView item中的内容信息
String text = listView.getItemAtPosition (position)+" ";
Log.i ("TAG","position ="+position+"=text="+text);
}
2. simpleAdapter的扩展性最好,可以定义各种各样的布局出来
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView listView;
private List<Map<String,Object>> mListData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
mListData = new ArrayList<Map<String, Object>>();
listView = (ListView) findViewById (R.id.listview);
// 数据适配器的定义 (simpleAdapter)(各参数名称,英文好的可以查看源码说明)
/* context 上下文
* data 数据源 一个map数据组成的list数据集合
* 每一个map都对应listview中的一行数据
* map中每一行的数据,应该包括from中指定的所有条目
* resource 布局文件ID
* from list数据中map的键名称
* to 要显示的视图列在“form”中的参数,即绑定视图中的ID名称
*/
// 给ListView设置数据适配器
SimpleAdapter adapter = new SimpleAdapter(this,getDate(),R.layout.item,
new String[]{"pic","name"},new int[]{R.id.pic,R.id.name} );
listView.setAdapter(adapter);
// 设置ListView的元素被选中时的事件处理监听器
listView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 获取点击ListView item中的内容信息
String text = listView.getItemAtPosition (position)+" ";
Log.i ("TAG","position ="+position+"=text="+text);
}
public List<Map<String,Object>> getDate() {
for (int i = 0; i < 10; i++) {
Map<String,Object> map = new HashMap<String,Object> ();
map.put ("pic",R.drawable.ic_launcher);
map.put ("name", "Text"+i);
mListData.add (map);
}
return mListData;
}
}
3,自定义适配器(继承BaseAdapter)
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView listView;
private List<BookBean> mListData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
mListData = new ArrayList<BookBean>();
listView = (ListView) findViewById (R.id.listview);
// 给ListView设置数据适配器
ListAdapter adapter = new ListAdapter(getDate(),this);
listView.setAdapter(adapter);
// 设置ListView的元素被选中时的事件处理监听器
listView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 获取点击ListView item中的内容信息
String text = listView.getItemAtPosition (position)+" ";
Log.i ("TAG","position ="+position+"=text="+text);
}
public List<BookBean> getDate() {
for (int i = 0; i < 10; i++) {
BookBean bean = new BookBean ();
bean.bookName = "Java"+i;
bean.bookContext = "Java 开发第一版"+i;
mListData.add (bean);
}
return mListData;
}
}
适配器(Adapter):
public class ListAdapter extends BaseAdapter{
List <BookBean> mList;
public LayoutInflater minflater;
public ListAdapter(List<BookBean> mList, Context context) {
this.mList = mList;
minflater = LayoutInflater.from (context);
}
@Override
public int getCount() {
return mList.size ();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView== null){
viewHolder = new ViewHolder ();
convertView = minflater.inflate (R.layout.item,null);
viewHolder.imageView = (ImageView) convertView.findViewById (R.id.pic);
viewHolder.bookNmae = (TextView) convertView.findViewById (R.id.bookname);
viewHolder.bookContext = (TextView) convertView.findViewById (R.id.bookcontext);
convertView.setTag (viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag ();
}
viewHolder.imageView.setImageResource (R.drawable.ic_launcher);
viewHolder.bookNmae.setText (mList.get (position).bookName);
viewHolder.bookContext.setText (mList.get (position).bookContext);
return convertView;
}
class ViewHolder{
public ImageView imageView;
public TextView bookNmae;
public TextView bookContext;
}
}
Bean对象:
public class BookBean {
public String bookName;
public String bookContext;
}