- 浏览: 559118 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
自定义适配器
1、实现
* 自定义适配器要继承 BaseAdapter 类
* 实现getView() 方法;
自定义适配器,继承baseAdapter:
方式二:
主函数入口:
自定义适配器:
配置文件:
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<Map<String,Object>> getData(){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); 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<Map<String, Object>> list; // 数据容器 , 封装用户传递过来的数据 private int layoutID; // 条目的布局ID private 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<Map<String, Object>> 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<Map<String,Object>> li = this.getData(); UserAdapter adapter = new UserAdapter(li,this); lv.setAdapter(adapter); } /** * 获取数据源 */ public List<Map<String,Object>> getData(){ List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); Map<String,Object> map = null; map = new HashMap<String,Object>(); map.put("name", "小三"); map.put("age",12); map.put("btn", R.drawable.ic_launcher); list.add(map); map = new HashMap<String,Object>(); 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<Map<String,Object>> listItems; //数据集 private Context context; //上下文 private LayoutInflater listContainer; //视图容器 //自定义控件集合 public final class ListItemView{ public Button btn; public TextView name; public TextView age; } public UserAdapter(List<Map<String, Object>> 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); } // 返回的是条目的ID public 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); //设置控件集到 convertView convertView.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; } } }
配置文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/myLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> ListView 条目上的子项: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/myLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名" /> <TextView android:id="@+id/age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:focusable="false" android:text="..." /> </LinearLayout>
- Android_自定义适配器.rar (1.8 MB)
- 下载次数: 5
发表评论
-
Android 之 网络访问服务器,解析JSON数据
2014-03-28 22:50 3415提示:在访问网络,或者服务器的数据一定要注意 网络权限的声明: ... -
Android 之 AsyncTask 异步任务
2014-03-20 08:44 3522Android ... -
Android 之 Looper Handler Message 之间的关系
2014-03-19 10:16 3665Android 的消息 ... -
Android 之 多线程与Socket联合使用案例
2014-03-19 10:15 2673多线 ... -
Android 之 多线程和Socket套接字的使用介绍
2014-03-19 10:15 4884And ... -
Android 之 实现Runnable 接口与继承Thread的区别
2014-03-19 10:15 2199实现Runnable 接口 相 ... -
Android 之 GSON解析JSON数据
2014-03-19 10:14 4490... -
Android 之 使用Pull 解析xml文件
2014-03-18 21:04 1045/** * 使用Pull进行 xml 文件的解析 ... -
Android 之 使用DOM解析xml文件
2014-03-18 21:02 2745DOM 解析 xml 格式的文件 1、 xml简介:xml ... -
Android 之 百度API 密钥安全码生成
2014-03-04 22:29 2413近期要做个关于旅游助手的应用,开始接触百度API了。大神们 ... -
Android 之 EditText属性用法介绍
2014-01-06 23:49 3990EditText的属性 EditText继承关系:View-- ... -
Android 之 自定义控件用法介绍
2014-01-08 10:40 1719自定义效果:实现:图片和文字混合 首先创建需要组合的子布局: ... -
Android 之 资源自适应与国际化
2014-01-08 10:40 3080<!-- 国际化和资源自适应 ... -
Android 之 Parcelable 序列化
2014-01-08 10:41 2698/* 序列化 * * 作 ... -
Android 之 五大布局案例
2014-01-08 10:41 21331、LinearLayout 线性布局例子: <Lin ... -
Android 之 通知Notification
2014-03-03 22:30 3897Notification 和 NotificationMana ... -
Android 之 手机全屏显示
2014-03-03 22:30 2344/* 1、全屏状态的显示 介绍:Android 中提供了Wi ... -
Android 之 拦截手机短信并自动转发
2014-03-03 22:29 5436拦截短信和发送短信都需要相关的权限: <?xml ve ... -
Android 之 将RAW资源文件写入SD卡工具类
2014-03-01 10:09 3614package com.sun.coptfiletosd; ... -
Android 之 监控手机电量
2014-03-01 10:09 1796package com.example.battery; ...
相关推荐
Android自定义适配器
在Android开发中,自定义适配器...总的来说,自定义适配器是Android开发中的核心技能之一,理解和熟练掌握其原理和使用方法对于提升应用的用户体验至关重要。通过实践和学习,你可以更好地应对各种复杂数据展示的需求。
Android实现自定义适配器的ExpandableListView示例,准备一级列表中显示的数据:2个一级列表,分别显示"group1"和"group2",准备第一个一级列表中的二级列表数据:两个二级列表,分别显示"childData1"和"childData2",...
总结起来,Android自定义适配器是Android应用开发中的一个重要技术点,它使得我们能够自由地控制数据的展示方式,从而实现各种各样的界面效果。通过理解并熟练掌握自定义适配器的原理和实践,开发者可以更高效地构建...
本教程将深入讲解如何使用ListView,结合自定义适配器以及解决Out-Of-Memory(OOM)问题。 首先,`ListView`是一个可滚动的视图,它能够显示一行行的数据。它通过Adapter来获取数据并将其渲染为可视化的列表项。...
在这个"ListView之自定义适配器Demo"中,我们将探讨如何使用自定义适配器来实现特定的UI布局和交互功能,包括点击事件处理以及内容展示。 首先,我们要了解ListView的工作原理。ListView通过Adapter来与数据源进行...
本压缩包"Android基于自定义适配器的ExpandableListView源码.zip"提供了一套完整的示例,帮助开发者深入理解如何通过自定义适配器来实现ExpandableListView的功能。 1. **ExpandableListView介绍** ...
本资源“Android 基于自定义适配器的ExpandableListView源码.zip”提供了一个使用自定义适配器实现的ExpandableListView的示例代码,这对于理解如何在实际应用中使用该控件非常有帮助。 1. **ExpandableListView...
### Android自定义适配器的编写详解 在Android开发中,`ListView`是开发者们最为熟悉的组件之一,尤其是在游戏开发领域,它不仅适用于游戏排行榜,还能用于简单的游戏关卡选择等场景,展现了其广泛的应用潜力。尽管...
本资源“Android 基于自定义适配器的ExpandableListView源码”提供了一种实现自定义适配器的方法,帮助开发者更好地理解和运用ExpandableListView。 首先,我们需要理解ExpandableListView的工作原理。这个控件分为...
Android 基于自定义适配器的ExpandableListView源码.zip项目安卓应用源码下载Android 基于自定义适配器的ExpandableListView源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3....
本篇将深入探讨如何基于自定义适配器来实现`ExpandableListView`的功能,源码分析将帮助我们更好地理解其工作原理。 首先,`ExpandableListView`继承自`ListView`,它通过`ExpandableListAdapter`来管理数据,这个...
在这个“安卓开发-android基于自定义适配器的ExpandableListView.zip”压缩包中,我们很可能会找到关于如何实现自定义适配器以驱动ExpandableListView的示例代码和教程。 首先,让我们理解ExpandableListView的工作...
在这个`Android 基于自定义适配器的ExpandableListView源码.zip`资源中,我们可以学习如何通过自定义适配器来有效地管理和显示这种复杂的列表数据。 首先,`ExpandableListView`继承自`ListView`,增加了可扩展性,...
此项目“Android 基于自定义适配器的ExpandableListView源码”是一个毕业设计示例,适用于学习如何在Android应用中实现这种复杂的数据结构。以下是对该项目中涉及的知识点的详细解释: 1. **ExpandableListView**:...
在这个“Android应用源码之自定义适配器的ExpandableListView.zip”中,我们可以深入理解如何为ExpandableListView自定义适配器,以及如何在实际应用中实现其功能。 首先,ExpandableListView的工作原理是基于...
在Android开发中,自定义适配器BaseAdapter是一种常见的技术,用于将数据绑定到各种视图组件,如ListView、GridView或Spinner等。BaseAdapter是Android SDK提供的一种抽象类,它是Adapter接口的一个实现,允许开发者...