阅读更多 自定义适配器

1、实现
* 自定义适配器要继承 BaseAdapter 类
* 实现getView() 方法;


package com.sun.useradapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;public class MainActivity extends Activity {private ListView listView;// 程序入口protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView) findViewById(R.id.listView);List list = getData();UserAdapter adpter = new UserAdapter(this,list,R.layout.list_item, new String[]{"image","tx1","tx2"},new int[]{R.id.imageView1,R.id.textView1,R.id.textView2});listView.setAdapter(adpter);}// 得到映射的数据public List> getData(){List> list = new ArrayList>();Map map = new HashMap();map.put("image",R.drawable.ic_launcher);map.put("tx1", "我是tx1");map.put("tx2","我是tx2");list.add(map);map = new HashMap();map.put("image",R.drawable.ic_launcher);map.put("tx1", "我是tx1");map.put("tx2","我是tx2");list.add(map);return list;}}


自定义适配器,继承baseAdapter:


package com.sun.useradapter;import java.util.List;import java.util.Map;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;/** * 功能实现:条目上能实现按钮以及复选框的事件 *  * @author Administrator *  */public class UserAdapter extends BaseAdapter {private Context context;private LayoutInflater inflater; // 视图容器,其功能和 findViewById();// 类似,查找布局文件,并实例化对象private List> list; // 数据容器 , 封装用户传递过来的数据private int layoutID; // 条目的布局IDprivate String from[]; // 数据中的 key -- 该key 对应的值用于显示到对应的控件上private int to[]; // 控件ID , 和 from 中key 的 value 对应, 实现一一对应的关系/** * 用于接收数据,并进行初始化的操作 *  * @param context *            当前上下文 * @param list *            数据集 * @param layoutID *            资源ID ,条目上的 * @param from *            key * @param to *            key 的 value 对应的控件 */public UserAdapter(Context context, List> list,int layoutID, String[] from, int[] to) {super();this.context = context;this.list = list;this.layoutID = layoutID;this.from = from;this.to = to;this.inflater = LayoutInflater.from(context); // 获得视图容器对象}/** * 返回 条目数量,根据数据集多少,有多少数据画多少次 */public int getCount() {Log.i("msg", "getCount()...");return list.size();}/** * 返回当前条目的内容 */public Object getItem(int arg0) {Log.i("msg", "getItem()...");return list.get(arg0);}/** * 返回条目ID */public long getItemId(int position) {Log.i("msg", "getItemID()...:" + position);return position;}/** * 画 条目布局内容, */public View getView(int position, View convertView, ViewGroup parent) {Log.i("msg", "getView()...当前条目 position:" + position);if(convertView==null){convertView = inflater.inflate(layoutID, null); // 将用于布局的资源,进行转换为视图对象}// 读取数据 ---for (int i = 0; i < from.length; i++) {if(convertView.findViewById(to[i]) instanceof ImageView){ImageView iv = (ImageView) convertView.findViewById(to[i]); // 初始化一个ImageView 对象// 设置该对象的相关信息iv.setBackgroundResource((Integer)list.get(position).get(from[i])); // 设置背景数据}else if(convertView.findViewById(to[i]) instanceof TextView){TextView tx = (TextView) convertView.findViewById(to[i]); // 根据资源ID 获取控件对象tx.setText((String)list.get(position).get(from[i]));}else{// 用于扩展}}// 编写事件监听器addListener(convertView,position); // 指定的控件触发事件return convertView;}/** * 其余控件的事件监听 * @param convertView */public void addListener(final View convertView,final int position){Log.i("msg", "addListener()...");// 按钮点击事件convertView.findViewById(R.id.button1).setOnClickListener(new OnClickListener() {public void onClick(View v) {Toast.makeText(context, "按钮触发",1000).show();TextView x = (TextView) convertView.findViewById(R.id.textView1);x.setText("我被改变了..");}});// 复选框事件((CheckBox)convertView.findViewById(R.id.checkBox1)).setOnCheckedChangeListener(new OnCheckedChangeListener() {public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if(isChecked){Toast.makeText(context, "选中了..."+position, 1000).show();}else{Toast.makeText(context, "未选中..."+position, 1000).show();}}});}}-----------------------------------------------------------------------

方式二:

主函数入口:

package com.example.listview_adapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.ListView;import android.widget.Spinner;public class MainActivity extends Activity {//声明属性private ListView lv;private Spinner spinner;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取对象lv = (ListView) findViewById(R.id.lv);//spinner = (Spinner) findViewById(R.id.spinner);List> li = this.getData();UserAdapter adapter = new UserAdapter(li,this);lv.setAdapter(adapter);}/** * 获取数据源 */public List> getData(){List> list = new ArrayList>();Map map = null;map = new HashMap();map.put("name", "小三");map.put("age",12);map.put("btn", R.drawable.ic_launcher);list.add(map);map = new HashMap();map.put("name", "小四");map.put("age",15);map.put("btn", R.drawable.ic_launcher);list.add(map);Log.i("msg","数据数为:"+list.size());return list;}}


自定义适配器:

import java.util.List;import java.util.Map;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;/** * ListView 的创建,一般要具备两大元素 * 1、数据集,即要映射的字符串、图片信息之类 * 2、适配器,实现把要映射的字符串、图片信息映射成视图(如:TextView  Image 等 组件),再添加到ListView中 *  * @author Administrator * */public class UserAdapter extends BaseAdapter implements OnClickListener {private List> listItems; //数据集private Context context;//上下文private LayoutInflater listContainer; //视图容器//自定义控件集合public final class ListItemView{public Button btn;public TextView name;public TextView age;}public UserAdapter(List> listItems, Context context) {super();this.listItems = listItems;this.context = context;listContainer = LayoutInflater.from(context); //创建视图容器工厂,并设置上下文}// 返回的是列表条目的个数public int getCount() {Log.i("msg", "getCount()...");return listItems.size();}// 返回的是列表条目的内容,根据 位置 在数据中对应查找public Object getItem(int position) {Log.i("msg", "getItem()...");return listItems.get(position);}// 返回的是条目的IDpublic long getItemId(int position) {Log.i("msg", "getItemId()...");return position;}/** * ListView Item 设置 *//* (non-Javadoc) * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) */public View getView(int position, View convertView, ViewGroup parent) {Log.i("msg", "getView()...");//自定义视图ListItemView listItemView = null;if(convertView == null){Log.i("msg", "converView==null...");// 新创建一个控件集合对象listItemView = new ListItemView();//获取item1 布局文件视图convertView = listContainer.inflate(R.layout.item1,null);//获取控件对象listItemView.age = (TextView) convertView.findViewById(R.id.age);listItemView.name= (TextView) convertView.findViewById(R.id.name);listItemView.btn = (Button) convertView.findViewById(R.id.btn);//设置控件集到 convertViewconvertView.setTag(listItemView);}else{Log.i("msg", "converView!=null...");listItemView = (ListItemView) convertView.getTag();}Log.i("msg", "设置控件的值....当前position:"+position);listItemView.age.setText(listItems.get(position).get("age").toString());listItemView.name.setText(listItems.get(position).get("name").toString());listItemView.btn.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.ic_launcher));listItemView.btn.setTag(String.valueOf(position));//设置Tag 标记符listItemView.btn.setOnClickListener(this);  //设置事件return convertView;}// 按钮点击事件public void onClick(View v) {switch (v.getId()) {case R.id.btn:Toast.makeText(context, v.getTag().toString()+"值",Toast.LENGTH_LONG).show();break;}}}


配置文件:

    ListView 条目上的子项:            
  • Android_自定义适配器.rar (1.8 MB)
  • 下载次数: 5

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. 三、安卓UI学习(1)
  4. 《Android开发从零开始》——25.数据存储(4)
  5. Android系统配置数据库注释(settings.db)
  6. android用户界面之按钮(Button)教程实例汇
  7. Android中不同应用间实现SharedPreferences数据共享
  8. 在Fragment中设置控件点击方法,执行失败。
  9. android中文api(89)——ViewManager

随机推荐

  1. RelativeLayout
  2. ListView中添加Button后,Button的点击事件
  3. Android(安卓)5.0 API 的变化——开发人
  4. Android(安卓)微信/支付宝 h5调原生支付
  5. ExpandableListView设置选中child的背景
  6. 安卓开发
  7. 怎么给Android(安卓)控件添加边框(样式)?
  8. FregServer进程,发送BC_TRANSACTION,唤醒Se
  9. Android命令行手动编译打包详解
  10. RecyclerView初级使用