本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定
数据,通过contextView.setTag绑定数据有按钮的ListView。
系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现
自定义适配器,必须手动映射数据,这时就需要重写getView()方法,系统在绘制列表的每一行的时候
将调用此方法。
ListView在开始绘制的时候,系统自动调用getCount()函数,根据函数返回值得到ListView的长度,
然后根据这个长度,调用getView()逐一画出每一行。
具体使用方法可以参考下面代码,只需记住Android自定义ListView三步骤:
第一步:准备主布局文件、组件布局文件等
第二步:获取并整理数据
第三部:绑定数据,这里我们是通过自己编写Adapter类来完成的
1.首先新建一个list.XML
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <LinearLayout android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" android:background="#f1e4f1">        <ImageView             android:id="@+id/image"            android:layout_width="wrap_content"            android:layout_height="wrap_content"/>        <TextView             android:id="@+id/title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textColor="#666872"/>        <Button             android:id="@+id/view"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="详细"/>    </LinearLayout><TextView     android:id="@+id/info"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textColor="#666872"/></LinearLayout>

2、新建一个适配器类MyAdspter.java
public class MyAdspter extends BaseAdapter {private List<Map<String, Object>> data;private LayoutInflater layoutInflater;private Context context;public MyAdspter(Context context,List<Map<String, Object>> data){this.context=context;this.data=data;this.layoutInflater=LayoutInflater.from(context);}/** * 组件集合,对应list.xml中的控件 * @author Administrator */public final class Zujian{public ImageView image;public TextView title;public Button view;public TextView info;}@Overridepublic int getCount() {return data.size();}/** * 获得某一位置的数据 */@Overridepublic Object getItem(int position) {return data.get(position);}/** * 获得唯一标识 */@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Zujian zujian=null;if(convertView==null){zujian=new Zujian();//获得组件,实例化组件convertView=layoutInflater.inflate(R.layout.list, null);zujian.image=(ImageView)convertView.findViewById(R.id.image);zujian.title=(TextView)convertView.findViewById(R.id.title);zujian.view=(Button)convertView.findViewById(R.id.view);zujian.info=(TextView)convertView.findViewById(R.id.info);convertView.setTag(zujian);}else{zujian=(Zujian)convertView.getTag();}//绑定数据zujian.image.setBackgroundResource((Integer)data.get(position).get("image"));zujian.title.setText((String)data.get(position).get("title"));zujian.info.setText((String)data.get(position).get("info"));return convertView;}}

关于上面LayoutInflater的使用:在实际开发种LayoutInflater这个类还是非常有用的。它的作用类似
于 findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件,并且会实例化!。
getView()的三个参数:position表示将显示的是第几行,covertView是从布局文件中inflate来的布
局。我们用LayoutInflater的方法将定义好的list.xml文件提取成View实例用来显示。然后将xml文件
中的各个组件实例化,这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为
它添加点击监听器,这样就能捕获点击事件。
3、activity_main.xml中添加ListView控件
<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=".MainActivity" ><ListView     android:id="@+id/list"    android:layout_width="fill_parent"    android:layout_height="fill_parent"></ListView></RelativeLayout>

4、在activity中调用ListView
public class MainActivity extends Activity {private ListView listView=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView=(ListView)findViewById(R.id.list);List<Map<String, Object>> list=getData();listView.setAdapter(new MyAdspter(this, list));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}public List<Map<String, Object>> getData(){List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();for (int i = 0; i < 10; i++) {Map<String, Object> map=new HashMap<String, Object>();map.put("image", R.drawable.ic_launcher);map.put("title", "这是一个标题"+i);map.put("info", "这是一个详细信息"+i);list.add(map);}return list;}}


更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. 《Android开发从零开始》——25.数据存储(4)
  4. Android系统配置数据库注释(settings.db)
  5. Android中不同应用间实现SharedPreferences数据共享
  6. Android四大基本组件介绍与生命周期
  7. Android四大组件的理解
  8. 第三章 Android程序设计基础
  9. android图表ichartjs

随机推荐

  1. android 发送自定义广播以及接收自定义广
  2. Android(安卓)获取SD卡路径和判断SD卡是
  3. andriod item内checked的setOnClickListe
  4. android全屏设置代码
  5. Android(安卓)VectorDrawable与SVG
  6. Android(安卓)Studio - Failed to find C
  7. android开机启动一个Service实例
  8. Eclipse下android相关设置
  9. Android(安卓)Notification RemoteViews
  10. android ATD configeration