Listview的自定义Adapter
来源:互联网 发布:网络女主播真实收入 编辑:程序博客网 时间:2024/06/05 09:14
网上关于这方面的好的文章:
http://yilee.info/android-diy-listview.html
http://blog.csdn.net/xiaominghimi/article/details/6314704
http://blog.csdn.net/chenzheng_java/article/details/6202586#
或许你可能有疑问,不是安卓为我们提供了Baseadapter, simpleadapter,ArrayAdapter三种适配器了,为什么我们还需要自己写设配器尼,这是因为我们在实际的项目中,又可以遇到在一个item中含有button按钮,多选框等控件,这就需要在item里面设置多个点击事件,而使用上面的适配无法实现这种效果,就需要我们使用自己定义的适配器。
java代码:
public class myadapter extends BaseAdapter { private List<HashMap<String, Object>> listitem=new ArrayList<HashMap<String, Object>>(); private View contentview; //用来缓存加载进来的视图 private int layoutId; //listview的单个item文件 public Context context; //用来获取传递进来的上下文 public class listview{ //用来缓存单个item文件中的资源控件 ImageView imageview; TextView textview; Button button; } public myadapter(Context context,int layoutId,List<HashMap<String, Object>> listitem) { // TODO Auto-generated constructor stub this.context=context; this.layoutId=layoutId; this.listitem=listitem; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Log.i("123", (String) listitem.get(position).get("textview")); View view; listview data=null; /* * 在下面我们通过判断contentview是否为空,来决定是不是需要加载布局,通过构造了一个listview类保存从布局中获取的 * 资源控件,并通过view.setTag()函数保存起来 * * convertView是旧View(这里不便翻译有的人翻成视图)的重用 * * 其实到此为止我们可以总结出convertview的机制了,就是在初始显示的时候, * 每次显示一个item都调用一次getview方法但是每次调用的时候covertview为空(因为还没有旧的view), * 当显示完了之后。如果屏幕移动了之后,并且导致有些Item(也可以说是view)跑到屏幕外面, * 此时如果还有新的item需要产生,则这些item显示时调用的getview方法中的convertview参数就不是null, * 而是那些移出屏幕的view(旧view),我们所要做的就是将需要显示的item填充到这些回收的view(旧view)中去, * 最后注意convertview为null的不仅仅是初始显示的那些item,还有一些是已经开始移入屏幕但是还没有view被回收的那些item。 */ if(convertView==null) { data=new listview(); view=LayoutInflater.from(context).inflate(layoutId, null); data.imageview=(ImageView)view.findViewById(R.id.imageview); data.textview=(TextView)view.findViewById(R.id.textview); data.button=(Button)view.findViewById(R.id.button); view.setTag(data); }else { view=convertView; data=(listview) view.getTag(); }// data.imageview.setBackgroundResource((int) listitem.get(position).get("imageview"));// data.textview.setText((CharSequence) listitem.get(position).get("textview")); data.imageview.setBackgroundResource(R.drawable.ic_launcher); data.textview.setText("123"); data.button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(context, "123", Toast.LENGTH_SHORT).show(); } }); return view; } @Override public int getCount() { // TODO Auto-generated method stub return listitem.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return 0; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; }}
listview单个item.xml文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/imageview" android:src="@drawable/ic_launcher" android:layout_height="wrap_content" android:layout_width="wrap_content" />s <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="123" /> <Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="click" android:layout_marginLeft="50dp" /></LinearLayout>
主活动Mainactivity
public class mainActivity extends Activity { private List<HashMap<String, Object>> listitem=new ArrayList<HashMap<String, Object>>(); private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.listview); listview=(ListView)findViewById(R.id.mylistview); init_data(); myadapter adapter=new myadapter(getApplicationContext(), R.layout.listview_item, listitem); listview.setAdapter(adapter); } void init_data() { HashMap<String, Object> item=new HashMap<String,Object>(); item.put("imageview", R.drawable.ic_launcher); item.put("textview", "123"); listitem.add(item); HashMap<String, Object> item1=new HashMap<String,Object>(); item1.put("imageview", R.drawable.ic_launcher); item1.put("textview", "456"); listitem.add(item1); HashMap<String, Object> item2=new HashMap<String,Object>(); item2.put("imageview", R.drawable.ic_launcher); item2.put("textview", "789"); listitem.add(item2); }}
实现效果:
0 0
- 自定义ListView的Adapter
- 自定义Adapter的ListView
- 自定义listview的adapter
- Listview的自定义Adapter
- 自定义adapter的listview
- 自定义ListView的Adapter
- ListView中Adapter的自定义
- Android 自定义Adapter的Listview
- 自定义ListView使用的Adapter
- Android 自定义Adapter的ListView
- Andoroid自定义Adapter的listView
- Android 自定义Adapter的ListView
- Android自定义adapter的listview
- listview自定义adapter的使用
- ListView的自定义适配器Adapter
- ListView的自定义Adapter的性能优化
- Android之自定义Adapter的ListView
- 【转】Android之自定义Adapter的ListView
- org.apache.poi.ss.usermodel 类操作excel数据遗漏
- c++设计模式----解释器模式interpreter
- POJ 2886 线段树
- ListView乱谈之ListView的布局
- struts2 Map<String,Object>session心得 浅析
- Listview的自定义Adapter
- Codeforces Round #321 Kefa and Watch(字符串哈希+线段树)
- MarkdownPad 安装使用
- string与char*和char[]之间的相互转换
- request.getInputStream中文乱码解决方案
- iOS开发中 使用XML和JSON对本地文件进行解析
- hihoCoder 1236 Scores 五维偏序 (分块 + bitset)
- 教你如何学习思维导图
- java异常-Error和Exception;try,catch,throw,throws,finally