少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述( 转)Android之自定义适配器相关的知识,希望能为你提供帮助。
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果。
有这样一个Demo ,实现图片文字混合列表。
package com.example.work; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.R.integer; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class MainActivity extends Activity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.id_list); //这里设置三个列表项,每个列表项对应一个图片和对应的文字 //图片数组 int image[] = new int[]{R.drawable.tou1,R.drawable.tou3,R.drawable.he}; //文字数组 String text[] = {"连连看","斗地主","爱消除"}; List< HashMap< String,Object> > list = new ArrayList< HashMap< String,Object> > (); //将一个图片和一个文字放入一个map集合中,并将map集合依次加入到list集合中 for(int i=0; i< image.length; i++) { HashMap< String, Object> map = new HashMap< String, Object> (); map.put("text", text[i]); map.put("image", image[i]); list.add(map); }//MyAdapter是自定义的适配器 MyAdapter myadapter = new MyAdapter(this, R.layout.layout_item, list); listview.setAdapter(myadapter); //点击列表项的响应事件 listview.setOnItemClickListener(new OnItemClickListener() {@Override public void onItemClick(AdapterView< ?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "点击了第"+(arg2+1)+"项,内容:"+arg0.getItemAtPosition(arg2).toString(), 1).show(); } }); }}MainActivity
自定义适配器:
package com.example.work; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class MyAdapter extends BaseAdapter{private Context context; //上下文 private int resourceId; //列表项的布局文件 private List< HashMap< String, Object> > list; //数据源 public MyAdapter(Context context,int resourceId,List< HashMap< String,Object> > list) { this.context = context; this.resourceId = resourceId; this.list = list; } //得到列表项的个数,即数据源的数据条数 @Override public int getCount() { int count = 0; if(list!=null) return list.size(); return count; }//得到对应position位置列表项的内容,即数据源list对应位置的数据 @Override public Object getItem(int position) {return list.get(position); }//得到列表项的id @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; }@Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub //提高对对象的复用 View view = null; if(convertView!=null) { view = convertView; } else { view = LayoutInflater.from(context).inflate(resourceId, parent,false); }ViewHolder holder = (ViewHolder) view.getTag(); if(holder==null) { holder = new ViewHolder(); holder.textView = (TextView) view.findViewById(R.id.id_textview); holder.image = (ImageView) view.findViewById(R.id.id_image); view.setTag(holder); } //给相应位置的图片和文字赋内容 holder.textView.setText(list.get(position).get("text").toString()); holder.image.setImageResource((Integer) list.get(position).get("image")); //返回视图,这里的视图是一整个列表项的视图 return view; }class ViewHolder { TextView textView; ImageView image; }}
主Activity布局文件:
< LinearLayout 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"tools:context=".MainActivity" > < ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/id_list" > < /ListView> < /LinearLayout>
列表项布局:
< ?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="horizontal" > < ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/id_image" /> < TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/id_textview" android:gravity="center_vertical" android:textStyle="bold|italic" /> < /LinearLayout>
效果图:
文章图片
【( 转)Android之自定义适配器】本文转自:安卓开发_浅谈ListView(自定义适配器)
推荐阅读
- 关于android帮助文档打开慢
- (转)Android之接口回调机制
- 搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)
- Android 手机卫士--弹出对话框
- Android加壳原理分析
- android千变万化的ViewPager之三
- Android利用HttpURLConnection实现模拟登录
- html块级元素和内联元素 – HTML教程
- 算法设计(与输入顺序相同的下一个更大的元素)