Android-adapter的用法
来源:互联网 发布:ubuntu安装gnome2 编辑:程序博客网 时间:2024/05/23 16:19
参考:http://blog.csdn.net/kenkao/article/details/8607012
http://www.cnblogs.com/devinzhang/archive/2012/01/20/2328334.html
1.ArrayAdapter的使用
ArrayAdapter 通常每一行显示一条数据
1)使用系统自定义布局文件显示数据
ArrayAdapter的构造函数:public ArrayAdapter(Context context,int resource,List<T> objects)
需要传递三个参数,context上下文、布局文件,数据源
//创建activity继承于ListActivitypublic class MainActivity extends ListActivity {protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);List<String> list=new ArrayList<String>();list.add("1");list.add("2");//三个参数依次为当前对象this,显示数据的布局文件(此处使用系统定义的一个布局文件),数据源ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,list);setListAdapter(adapter);}}
2)自定义布局文件显示数据
构造函数
public ArrayAdapter(Context context,int resource,int textViewResourceId,List<T> objects)需要传递四个参数,context上下文、自定义布局文件,自定义布局文件中控件的id,数据源
protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//String[] strs={"1","2","3"};List<String> list=new ArrayList<String>();list.add("1");list.add("2");//此处使用自定义布局文件,参数依次为this,自定义布局文件,自定义布局文件中控件的id,数据源ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.arrary_adapter,R.id.textView,list);setListAdapter(adapter);}
自定义布局文件array_adapter.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.androidtest.MainActivity" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>
2.SimpleAdapter
SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局。
构造函数:SimpleAdapter(Context context,List<? extendsMap<String, ?>> data, int resource,String[] from, int[] to)
Parameters:
- context The context where the View associated with this SimpleAdapter is running
- data A List of Maps. Each entry in the List corresponds to one row in the list. The Maps contain the data for each row, and should include all the entries specified in "from"
- resource Resource identifier of a view layout that defines the views for this list item. The layout file should include at least those named views defined in "to"
- from A list of column names that will be added to the Map associated with each item.
- to The views that should display column in the "from" parameter. These should all be TextViews. The first N views in this list are given the values of the first N columns in the from parameter.
public class MainActivity extends ListActivity {protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//创建simpleadapter,参数依次为this,数据源,//自定义显示数据的布局文件,//一个字符串数组,存放的是map中对应的键,会根据这里的key在map获取对应的值放入布局文件中对应的控件中//整型数组,根据布局文件中控件id找到对应的控件,对应的是字符数组中的key,再根据key获取数据放入控件SimpleAdapter adapter = new SimpleAdapter(this, getData(),R.layout.simple_adapter,new String[] { "img", "title", "info" }, new int[] { R.id.img,R.id.title, R.id.info });setListAdapter(adapter);}public List<HashMap<String, Object>> getData() {// 创建一个List,用来保存每一行数据List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();// list中存放的是hashmap类型的值,每一个map中保存着一行数据中所有内容的键值对HashMap<String, Object> map1 = new HashMap<String, Object>();// 添加第一行数据中的内容map1.put("title", "google");map1.put("img", R.drawable.ic_launcher);map1.put("info", "google info");// 将第一行内容放入listlist.add(map1);// 第二行数据内容HashMap<String, Object> map2 = new HashMap<String, Object>();map2.put("title", "android");map2.put("img", R.drawable.ic_launcher);map2.put("info", "android info");list.add(map2);return list;}}
simple_adapter.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" /> </LinearLayout></LinearLayout>
3.BaseAdapter
有时候需要添加一个按钮,但是按钮是无法映射的,即使你成功的用布局文件显示出了按钮也无法添加按钮的响应,所以考虑自定义类然后继承于BaseAdapter。
public class MainActivity extends ListActivity {private List<HashMap<String, Object>> list;protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);list=getData();MyAdapter adapter=new MyAdapter(this);setListAdapter(adapter);}public List<HashMap<String, Object>> getData() {// 创建一个List,用来保存每一行数据ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();// list中存放的是hashmap类型的值,每一个map中保存着一行数据中所有内容的键值对HashMap<String, Object> map1 = new HashMap<String, Object>();// 添加第一行数据中的内容map1.put("title", "google");map1.put("img", R.drawable.ic_launcher);map1.put("info", "google info");// 将第一行内容放入listlist.add(map1);// 第二行数据内容HashMap<String, Object> map2 = new HashMap<String, Object>();map2.put("title", "android");map2.put("img", R.drawable.ic_launcher);map2.put("info", "android info");list.add(map2);return list;}public class MyAdapter extends BaseAdapter{//LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化private LayoutInflater mInflater;//构造函数public MyAdapter(Context context){//获取inflater实例this.mInflater = LayoutInflater.from(context);}//从list获取数据的条数,得到数据的行数public int getCount() {// TODO Auto-generated method stubreturn list.size();}//根据当前位置position获取当前行的数据对象public Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}//获取当前位置positionpublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder=null;//covertView是从布局文件中inflate来的布局,如果为空,从inflater中inflate布局文件if(convertView==null){holder=new ViewHolder();//获取自定义布局文件convertView=mInflater.inflate(R.layout.base_adapter, null);//实例化控件holder.img = (ImageView)convertView.findViewById(R.id.img);holder.title = (TextView)convertView.findViewById(R.id.title);holder.info = (TextView)convertView.findViewById(R.id.info);holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);convertView.setTag(holder);}else{holder=(ViewHolder) convertView.getTag();}//为控件设置属性holder.img.setBackgroundResource((Integer)list.get(position).get("img"));holder.title.setText((String)list.get(position).get("title"));holder.info.setText((String)list.get(position).get("info")); holder.viewBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("click.....");} });return convertView;}//自定义一个ViewHolder,里边包含自定义布局文件中的控件public class ViewHolder{public ImageView img;public TextView title;public TextView info;public Button viewBtn;}}}
convertView == null 的时候,如果为空,就会根据设计好的自定义布局base_adapter.xml,来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件)。再用convertView的setTag将viewHolder设置到Tag中,以便系统第二次绘制ListView时从Tag中取出。
如果convertView不为空的时候,就会直接用convertView的getTag(),来获得一个ViewHolder。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" /> </LinearLayout> <Button android:id="@+id/view_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="click" /></LinearLayout>
Listview和Adapter:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html
- Android-adapter的用法
- Android的Adapter的用法
- Android之Adapter的用法
- Android的Adapter用法总结
- Android各种Adapter的用法
- Android各种Adapter的用法
- Android的Adapter用法理解
- Android各种Adapter的用法
- Android Adapter的几种用法
- Android中各种Adapter的用法
- Android中各种Adapter的用法
- Android中Adapter的用法总结
- Android开发之 。。各种Adapter的用法
- Android—ListView和Adapter的用法
- Android开发各种Adapter的用法
- Android Adapter用法总结
- android 中adapter用法
- Android中的Adapter用法
- 11077 最长公共子字符串
- CSDN的博客积分规则及博客排名规则
- 欢迎使用CSDN-markdown编辑器
- C/C++ 类型自动转换规则
- 10303 数字三角
- Android-adapter的用法
- mysql简单备份与恢复
- 动态规划之01背包问题(最易理解的讲解)
- C查看分配给用户的内存及分配给系统的内存大小
- 使用hibernate运行产生的红字解决方法,虽然不影响,但是看着不爽
- VS2013(Win10X64)-配置编译Caffe
- Delphi 常用函数记录
- [LeetCode]Evaluate Reverse Polish Notation
- C字节对齐详解