Android控件 – ListView的使用(一)– 使用Adapter绑定数据
2016-10-24 13:07
676 查看
ListView是Android最常使用的控件之一,要使用ListView要先了解适配器Adapter。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。Android中常用的几个Adapter有:
示例:
1、 在布局XML中添加一个ListView控件:
2、 Activity代码:
说明:
ArrayAdapter的构造函数中第一个参数为context,第二个参数为包含TextView,其中也可以是自定义一个layout,但必须要有TextView,第三个参数就是ListView的内容。第二个参数可以使用android.R.layout.simple_list_item_checked或android.R.simple_list_item_single_choice资源,这样就可以实现带复选或单选的ListView,但是必须要用setChoiceMode()方法来设定多选还是单选,否则是无法选择的,如:lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);无论使用哪种资源,决定多选或单选是由setChoiceMode()方法来决定的。
示例:
1、新建一个XML布局文件list_view_item.xml:
2、修改Activity代码:
说明:
SimpleAdapter的构造函数中第一个参数为context,第二个参数接收一个Map数据源,本示例中使用了hashMap,将HashMap的每个键的数据映射到布局文件中对应控件上。
示例:
1、 修改list_view_item.xml文件:
2、 新建类MyAdapter:
3、 修改Activity:
Adapter | 含义 |
ArrayAdapter<T> | 用来绑定一个数组,支持泛型操作 |
SimpleAdapter | 用来绑定在xml中定义的控件对应的数据 |
BaseAdapter | 通用的基础适配器 |
ListView使用ArrayAdapter
ArrayAdapter使用非常简单,它只要是实现简单的数组里对象的字符串到layout中预先定义的TextView控件上的数据绑定。示例:
1、 在布局XML中添加一个ListView控件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
2、 Activity代码:
public class MainActivity extends Activity { private static final String[] strs = new String[] { "一", "二", "三", "四", "五","六","七","八","九","十","十一","十二","十三","十四", "十五","十六","十七","十八","十九","二十","二十一","二十二","二十三" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView) findViewById(R.id.lv); lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strs)); } }
说明:
ArrayAdapter的构造函数中第一个参数为context,第二个参数为包含TextView,其中也可以是自定义一个layout,但必须要有TextView,第三个参数就是ListView的内容。第二个参数可以使用android.R.layout.simple_list_item_checked或android.R.simple_list_item_single_choice资源,这样就可以实现带复选或单选的ListView,但是必须要用setChoiceMode()方法来设定多选还是单选,否则是无法选择的,如:lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);无论使用哪种资源,决定多选或单选是由setChoiceMode()方法来决定的。
ListView使用SimpleAdapter
有时候,我们除了要在ListView展示单调的文字外,还需要自定义一些内容,例如加入图片和多种文字等。这时就要使用SimpleAdapter了。SimpleAdapter可以通过它自定义item内容来实现一些灵活的布局示例:
1、新建一个XML布局文件list_view_item.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="50dp" android:layout_width="match_parent"> <ImageView android:id="@+id/item_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ic_launcher"/> <TextView android:id="@+id/item_title" android:layout_height="match_parent" android:layout_width="match_parent" android:textSize="20sp" android:gravity="center_vertical"/> </LinearLayout>
2、修改Activity代码:
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView) findViewById(R.id.lv); ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); for(int i = 0; i < 10; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemIcon", R.mipmap.ic_launcher); map.put("ItemText", "这是第" + i + "行"); listItem.add(map); } SimpleAdapter mSimpleAdapter = new SimpleAdapter( this, listItem, R.layout.list_view_item, new String[] {"ItemIcon", "ItemText"}, new int[] {R.id.item_icon,R.id.item_title} ); lv.setAdapter(mSimpleAdapter); } }
说明:
SimpleAdapter的构造函数中第一个参数为context,第二个参数接收一个Map数据源,本示例中使用了hashMap,将HashMap的每个键的数据映射到布局文件中对应控件上。
ListView使用BaseAdapter
虽然SimpleAdapter的自由度很高,但只能用于展示数据。如果想在每一个item里获得用户焦点和做一些处理用户的操作,例如item里包括按钮的使用。这时应该使用最灵活的适配器BaseAdapter。BaseAdapter它是一个抽象类,所以必须通过自定义一个继承类来实现,而且还要实现相应的一系列方法。示例:
1、 修改list_view_item.xml文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="50dp" android:layout_width="match_parent"> <ImageView android:id="@+id/item_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ic_launcher"/> <TextView android:id="@+id/item_title" android:layout_height="match_parent" android:layout_width="match_parent" android:textSize="20sp" android:gravity="center" android:text="11111"/> <Button android:id="@+id/item_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:layout_alignParentRight="true"/> </RelativeLayout>
2、 新建类MyAdapter:
public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; private ArrayList<HashMap<String, Object>> mListItem; public MyAdapter(Context context, ArrayList<HashMap<String, Object>> listItem) { this.mInflater = LayoutInflater.from(context); this.mListItem = listItem; } @Override public int getCount() { return mListItem.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_view_item, null); holder = new ViewHolder(); holder.icon = (ImageView) convertView.findViewById(R.id.item_icon); holder.title = (TextView) convertView.findViewById(R.id.item_title); holder.btn = (Button) convertView.findViewById(R.id.item_btn); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); holder.title.setText(mListItem.get(position).get("ItemTitle").toString()); holder.btn.setText(mListItem.get(position).get("ItemBtnText").toString()); holder.btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // } }); return convertView; } public static class ViewHolder { public ImageView icon; public TextView title; public Button btn; } }
3、 修改Activity:
public class MainActivity extends Activity { ArrayList<HashMap<String, Object>> mListItem; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListItem = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < 30; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemTitle", "第" + i + "行"); map.put("ItemBtnText", "第" + i + "个按钮"); mListItem.add(map); } ListView lv = (ListView) findViewById(R.id.lv); MyAdapter mAdapter = new MyAdapter(this, mListItem); lv.setAdapter(mAdapter); } }
相关文章推荐
- Android中ListView同过自定义布局并使用SimpleAdapter的方式实现数据的绑定
- 【Android】使用自定义Adapter优化ListView、修改数据及控件内部布局
- android ListView布局之三(使用自定义的Adapter绑定数据,通过contextView.setTag绑定数据)有按钮的ListView
- Android采用ListView实现数据列表显示1-使用SimpleCursorAdapter进行数据绑定
- android ListView布局之三(使用自定义的Adapter绑定数据,通过contextView.setTag绑定数据)有按钮的ListView
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(二)
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据(一)
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据
- Android_ListView_Adapter使用和数据动态加载
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- Android控件——ListView之Adapter提供数据(其三)
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(一)
- Android控件——ListView之Adapter提供数据(其二)
- Android -- listview的使用, Inflater打气筒创建View对象,三种数据Adapter
- android ListView布局之二(是用simpleAdapter绑定数据)
- Android异步下载网络图片&android解析xml文件的方式&使用Adapter为ListView提供数据
- android使用notifyDataSetChanged()方法,adapter的数据更新了,但是ListView的内容没有更新;
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定数据(二)
- android使用notifyDataSetChanged()方法,adapter的数据更新了,但是ListView的内容没有更新;
- Android -- listview的使用, Inflater打气筒创建View对象,三种数据Adapter