ListView的自定义适配器Adapter
来源:互联网 发布:des算法实例 编辑:程序博客网 时间:2024/06/05 05:45
先吹个牛
在我刚入Android的时候,真心觉得ListView的自定义适配器好难啊,不过后来写的多了,渐渐发现它的使用方式也就那点套路,初期自学的话上手不易,但是真的上手了就会很简单了,当然了,listview的运用扩展性特别强,所以后期还得靠自己的悟性,废话不多说,最初级的教程奉上,(大神勿喷,本人菜鸟,不当之处多多包涵)
准备工作
主窗体至少得有一个listview控件吧,既然是自定义适配器,还少不了一个自定义布局的视图(view),【新手请看:listview是一个数据列表,这个自定义视图就是来定义每一行的布局】,视图的东西好像就这么多,下面是代码了
自定义视图的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="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" > <TextView android:id="@+id/textName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="TextView" /> <TextView android:id="@+id/textSex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="TextView" /> <TextView android:id="@+id/textAge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="TextView" /> </LinearLayout></LinearLayout>
自定义类
需要写两个类,一个是继承于BaseAdapter的自定义适配器类,暂且命名为CustomAdapter吧,还有一个类似于枚举但又不是枚举的类(这就有点尴尬了),可能有大神写成别的方式了,我个人认为我这方式也可以满足需要,类名CustomMessageItems,直接上代码吧,简单粗暴,代码里都有注释
CustomAdapter类
import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.listview.R;public class CustomAdapter extends BaseAdapter { private LayoutInflater mInflater; private Context context; private List<CustomMessageItems> mMessageItem = new ArrayList<CustomMessageItems>(); public CustomAdapter(Context context, List<CustomMessageItems> mMessageItem) { this.context = context; this.mInflater = LayoutInflater.from(context); this.mMessageItem = mMessageItem; } @Override public int getCount() { // TODO Auto-generated method stub return mMessageItem.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mMessageItem.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 这块代码是自定义适配器的关键,用来为自定义视图赋值以及其他操作 ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.lv_custom_item, null);// 将自定义xml视图装载进convertView holder = new ViewHolder(convertView);// 然后通过实例化,将视图传给自定义类ViewHolder,在ViewHolder中声明并绑定自定义视图中的控件 convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } CustomMessageItems item = mMessageItem.get(position); holder.txtName.setText(item.Name); holder.txtSex.setText(item.Sex); holder.txtAge.setText(item.Age); return convertView;// 将装载完毕的视图返回给listview } private class ViewHolder { TextView txtName, txtSex, txtAge; public ViewHolder(View v) { txtName = (TextView) v.findViewById(R.id.textName); txtSex = (TextView) v.findViewById(R.id.textSex); txtAge = (TextView) v.findViewById(R.id.textAge); } }}
我觉得注释已经很详细了,就不多言了。
CustomMessageItems类(这个不伦不类,见笑了)
public class CustomMessageItems { public String Name; public String Sex; public String Age;}
这个类就这么多,主要是为每一行的自定义布局提供数据
开始装载listview
视图和类都准备好了,开始将自定义视图与listview建立联系,这才是我们的最终目的!
listview控件声明的事我就不提了
准备数据
实例化一个装载CustomMessageItems 的List数据集,用来收集数据
List<CustomMessageItems> mMessageItem = new ArrayList<CustomMessageItems>();
实例化适配器
将刚才自定义的适配器进行实例化,传入List数据集和当前Context
CustomAdapter myAdapter;//声明部分
myAdapter = new CustomAdapter(MainActivity.this, mMessageItem);
接着就是将Adapter装载进listview
listview.setAdapter(myAdapter);
以下是完整代码
import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;import com.example.listview.R;public class MainActivity extends Activity { ListView listview; List<CustomMessageItems> mMessageItem = new ArrayList<CustomMessageItems>(); CustomAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listView1); bindDate(); } private void bindDate() { // TODO Auto-generated method stub CustomMessageItems item = new CustomMessageItems(); item.Name = "李明"; item.Sex = "男"; item.Age = "20岁"; mMessageItem.add(item); item = new CustomMessageItems(); item.Name = "小红"; item.Sex = "女"; item.Age = "12岁"; mMessageItem.add(item); item = new CustomMessageItems(); item.Name = "张萌萌"; item.Sex = "女"; item.Age = "28岁"; mMessageItem.add(item); item = new CustomMessageItems(); item.Name = "刘韬"; item.Sex = "男"; item.Age = "22岁"; mMessageItem.add(item); myAdapter = new CustomAdapter(MainActivity.this, mMessageItem); listview.setAdapter(myAdapter); }}
很清晰了吧,收工!
源码地址:http://download.csdn.net/download/qq_23931287/9944412
很尴尬
发现一个很严重的问题,我刚知道,资源下载至少一积分,这就有点尴尬了,老规矩,需要源码工程的留邮箱
- ListView的自定义适配器Adapter
- Android中的listview的adapter自定义适配器
- Adapter适配器的自定义
- Android listview与adapter用法(包括自定义需要的适配器)
- Android - ListView自定义适配器Adapter中获得EditText的值
- 自定义ListView的Adapter
- 自定义Adapter的ListView
- 自定义listview的adapter
- Listview的自定义Adapter
- 自定义adapter的listview
- 自定义ListView的Adapter
- android listview和适配器adapter的使用
- Adapter---打造万能的ListView GridView 适配器
- Adapter---打造万能的ListView GridView 适配器
- Android ListView的通用适配器Adapter
- 通用型的listview/gridview适配器adapter
- Android自定义ListView或GridView适配器Adapter的getView方法不执行的问题
- ListView 适配器(Adapter)
- Race Condition 引起的 HashMap CPU100%
- ssh-spring与struts整合
- js获取本地地址及天气的几种方式
- Android零基础入门第42节:自定义BaseAdapter
- 每天一个linux命令(52):ifconfig命令
- ListView的自定义适配器Adapter
- Cookbook for R-基础(翻译笔记)
- webstorm设置sass自动编译
- 点击一个按钮显示div,点击div之外的地方div隐藏,点击div之内的地方div不隐藏
- 关于使用MFC DLL时提示内存泄漏问题
- 51nod1298 圆与三角形(点到点,点到线段距离模板)
- matlab与c中常用的多行注释
- vuex学习保留
- 新建txt,创建快捷方式