ListView之适配器
来源:互联网 发布:mac系统u盘制作 编辑:程序博客网 时间:2024/06/05 02:38
注:本文知识整理自Mooc的相关课程,主要整理适配器为:ArrayAdapter,SimpleAdapter,BaseAdapter.
.
ArrayAdapter
public class MainActivity extends Activity{ private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 匹配布局文件中的ListView控件 listView = (ListView)findViewById(R.id.listView); String[] data = new String[] { "java", "C++", "JavaScript", "Php","Python" }; /* ArrayAdapter的数据源可为数组也可为是集合(参数不同),以下为数组的用例new ArrayAdapter<String>(context【上下文,Activity中的this】,textViewResourceId【ListView单列所对应的布局文件】, object【数据源数:数组或List】); */ ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data); // 给ListView设置数据适配器 listView.setAdapter(adapter);-------------------------------------------------------------R.layout.activity_main:只加了一个ListView的布局--------------------------------------------------------------R.Layout.simple_list_item_1:只加了一个TextView的布局--------------------------------------------------------------
.
SimpleAdapter
public class MainActivity extends Activity{ private ListView listView; private SimpleAdapter simple_adapter; private List<Map<String, Object>> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); list = new List<Map<String, Object>>();/*new SimpleAdapter(context,data,resoureID,from,to)context:上下文,即ListView所在的Activity的this;data:数据源(只能是集合List<?extends Map<String,?>> data)一个Map所组成的List集合,每一个Map都会对应ListView列表中的一行。每一个Map(键-值)中的键必须包含所有在from中所指定的键resources:列表单列所对应的布局文件IDfrom:Map中的键名,即给resources中每个组件的ID取一个名字to:绑定数据视图中的ID,与from成对应关系,即:resources中每个组件的ID*/ simple_adapter = new SimpleAdapter(MainActivity.this, getDate(), R.layout.list_item, new String[] {"image","text"} new int[] { R.id.image,R.id.text} ); listView.setAdapter(simple_adapter);}private List<Map<String, Object>> getData() { for(int i=0;i<20;i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("image",R.drawable.ic_launcher); map.put("text","第"+i+"张图") list.add(Map); } return list; }-------------------------------------------------------------R.layout.activity_main:只加了一个ListView的布局-----------------------------------------------------------R.layout.list_item:-----------------------------------------------------------<?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:gravity="center_vertical" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:textSize="25sp" /></LinearLayout>
BaseAdapter
1.先创建两个Layout
-----------------------------------------------------------------activity_main为只添加一个ListView的布局文件-----------------------------------------------------------------item.xml:-----------------------------------------------------------------<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:descendantFocusability="blocksDescendants" ><ImageView android:id="@+id/myimage" android:layout_width="100dp" android:layout_height="180dp" android:paddingLeft="5dp" android:src="@mipmap/littletubiao" /><LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" ><TextView android:id="@+id/myname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#f0f" android:paddingLeft="10dp" android:text="你还未命名" /><TextView android:id="@+id/mycontext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:paddingLeft="10dp" /></LinearLayout></LinearLayout>
.
2.ItemBean(ListView单列内容的构造函数)
public class ItemBean { public int ItemImageId; public String Itemname; public String Itemcontext; public ItemBean( int itemImageId,String itemname,String itemcontext){ ItemImageId=itemImageId; Itemname=itemname; Itemcontext=itemcontext; }}
3.MainActivity
public class Picture extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<ItemBean> itemBeanList= new ArrayList<>(); for(i = 0;i<20;i++){ itemBeanList.add(new ItemBean( R.mipmap.ic_launcher, "我是标题"+i, "我是内容"+i )) } ListView list = (ListView) findViewById(R.id.mylist); list.setAdapter(new MyAdapter(this, ItemBeanList);); }}
4.MyAdapter
public class MyAdapter extends BaseAdapter{ private LayoutInflater mLayoutInflater; private List<ItemBean> myList; public MyAdapter(Context context,List<ItemBean> list) { myList=list; mLayoutInflater=LayoutInflater.from(context); //从Context中,获得一个布局填充器,这样你就可以使用这个填充器来把xml布局文件转为View对象了。 //mLayoutInflater布局装载器对象 //context:要使用当前Adapter的界面对象 } //将适配器与ItemBean关联起来 @Override public int getCount() { //即ListView所需要显示的数据的数量(列的数量),即list的大小 return myList.size(); } @Override public Object getItem(int position) { //获取数据集中及指定索引对应的数据项 return myList.get(position); } @Override public long getItemId(int position) { //获得指定行对应的id return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null;//利用ListView的缓存机制,避免每次刷新都重新重新创建一个View,造成浪费,当convertView为空时才创建。 if (convertView == null) { holder = new ViewHolder();// 由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null//通过holder避免多次使用findViewById而造成浪费,将Hold与convertView相关联后,之后只需通过convertView.getTag()即可获取相应控件(无需再次创建) convertView = mLayoutInflater.inflate(R.layout.item, null); holder.img = (ImageView) convertView.findViewById(R.id.myimage); holder.title = (TextView) convertView.findViewById(R.id.myname); holder.content = (TextView) convertView.findViewById(R.id.mycontext); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); }// 取出bean对象 ItemBean bean = myList.get(position);// 设置控件的数据 holder.img.setImageBitmap(bean.ItemImage); holder.title.setText(bean.Itemname); holder.content.setText(bean.Itemcontext); return convertView; //返回ListView单列显示的内容 } }class ViewHolder{ public ImageView img; public TextView title; public TextView content;}
注:LayoutInflater在Android中是“扩展”的意思,作用类似于findViewById(),不同的是LayoutInflater是用来获得布局文件对象的,而findViewById()是用来获得具体控件的。
LayoutInflater经常在BaseAdapter的getView方法中用到,用来获取整个View并返回。
阅读全文
0 0
- ListView 之 自定义适配器
- ListView之适配器
- ListView之万能适配器
- ListView之适配器
- Android开发之适配器ListView
- android之简单listview适配器
- Android之listview万能适配器
- listView适配器之BaseAdapter详解
- Android开发之ListView适配器优化
- Android 自定义ListView系列之适配器模式
- android之自定义适配器实现ListView
- ListView之适配器参数传递问题
- Android源码之ListView的适配器模式
- Android源码之ListView的适配器模式
- android开发之ListView GridView适配器架构
- ListView (3) 之适配器 ArrayAdapter/SimpleAdapter/BaseAdapter
- android ListView适配器之SimpleAdapter的用法
- ListView之自定义适配器的使用
- 奇异值分解:SVD
- 【第三篇blog】第一次模拟赛反思与解析
- 一个经典例子让你彻彻底底理解java回调机制
- 安全有感
- C 中内存的一些操作
- ListView之适配器
- 如何保持离开当前体制的能力
- MyBatis传入参数与parameterType不同类型使用
- 分治算法
- ios bugly自动上传符号表不起作用
- 枚举
- spring security 自定义退出策略
- 大道至简,职场上做人做事做管理
- Linux服务器公钥私钥登录