Android中ListView与适配器ArrayAdapter,SimpleAdapter,定义BaseAdapter适配器,ListView添加headerView,ListView滚动到最后一项
来源:互联网 发布:模块化编程的好处 编辑:程序博客网 时间:2024/06/05 07:16
工作内容:
1.ListView,ArrayAdapter.简单适配器(主要用于单一的文本)
2.SimpleAdapter:构造方法SimpleAdapter(Context context,List<Map<String,?>> data,reString [] from,int [] to)
3.自定义适配器继承BaseAdapter,主要方法:getView(int position,View convertView,ViewGroup parent)
4.优化自定义适配器:
①.判定convertView是否为空【convertView==空的次数是可见列表项数+2】
②.定义一个Holder来减少findViewById的反复使用
5.ListView进阶版之ListView.addHeaderView(View view);
6.ListView让最后一项显示出来的2种方法
学习分享:
这里我就写下对ArrayAdapter,SimpleAdapter和常用自定义适配器继承于BaseAdapter
1.ArrayAdapter就不多说,使用方法参照下面图片
2.SimpleAdapter的使用
在使用它时,最简单的方法是使用构造函数:
SimpleAdapter adapter = newSimpleAdapter(Context context,List<Map<String,?>> data,String [] from,int [] to)
参数:context — 上下文,data — 是一个List<Map<String,?>>,from — 是List中Map的键组成的数组,to — 是自定义list_item.xml中组件ID值数组【需对应前面的from,一一对应,这样在放数据进去的时候才不会乱】
3.自定义适配器继承BaseAdapter
实例:
//List中存放的类(数据存放类)public class User { private String name,pwd; public User(String name, String pwd) { this.name = name; this.pwd = pwd; } public String getName() { return name; } public String getPwd() { return pwd; }}public class MyAdapter extends BaseAdapter { private Context context = null; private int resourceID = 0; private List<User> list = null; /** * 构造函数 * @param context 上下文(ListView所在的Activity) * @param resourceID 布局文件ID(自己创建的一个布局文件,将要显示在ListView项中) * @param list 数据(在ListView显示的数据) */ public MyAdapter(Context context, int resourceID, List<User> list) { this.context = context; this.resourceID = resourceID; this.list = list; } //返回给LiesView,给它说需要显示的项(item)有多少 @Override public int getCount() { return list.size(); } //返回当前项对应的对象 @Override public Object getItem(int position) { return list.get(position); } //返回当前项的位置 @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { User user = (User) getItem(position); ViewHolder viewHolder = new ViewHolder(); /** * 1.如果没有解析过布局文件则去解析,解析过则不解析 * 2.用解析过后得到的view找到布局文件中的文件 * 3.并赋值给viewHolder的属性——以后这个属性就可以重复使用,不再需要去findViewById */ if(convertView == null){ convertView = LayoutInflater.from(context).inflate(resourceID,null); viewHolder.textName = (TextView)convertView.findViewById(R.id.textViewName_yellowpage_sonpage); viewHolder.textNumber = (TextView)convertView.findViewById(R.id.textViewNumber_yellowpage_sonpage); //给convertView设置附加数据 convertView.setTag(viewHolder); }else{ //从convertView拿去附加数据 viewHolder = (ViewHolder) convertView.getTag(); } //设置对应组件显示的内容 viewHolder.textName.setText(user.getName()); viewHolder.textNumber.setText(user.getPwd()); return convertView; }}/** * “持有者”类 * 用于优化适配器 * 用一个对象放置所有组件 * 这样就只需要一次findViewById(耗时,耗内存的操作) */class ViewHolder{ TextView textName,textNumber;}listView.setAdapter(adapter);listView.setOnItemClickListener(this);
【convertView==null的次数是:可见列表项数+2】
//调用(在一个Activity中的onCreate去用一个ListView组件调用)
...
listView = (ListView)findViewById(R.id.listView_yellowpage_sonpage);
//初始化MyAdapter adapter = new MyAdapter(this,R.layout.list_yellowpage_sonpage,list);//给listView添加适配器
//设置事件监听
...
注意事项:
当数据发生改变时,需提醒适配器,这样才可以达到数据变,内容就变
adapter.notifyDataSetChanged();
4.ListView进阶版之ListView.addHeaderView(View view);
<span style="font-size:14px;">//先初始化ListViewView view = LayoutInflater.from(getContext()).inflate(R.layout.layout_contactlist_head, null, true); listView.addHeaderView(view);//必须放在setAdapter()之前 adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1);//添加布局文件 adapter.addAll(usernames);//添加数据 listView.setAdapter(adapter); listView.setOnItemClickListener(this);</span>注意:listView.addHeaderView(view);//必须放在setAdapter()之前
listView添加项点击事件后。点击的项是1,获取到的数据项应该是0,因为header占了一个项的位置
5.ListView滚动到最后一项
方式一:Java中动态加载(推荐)
listView.setSelection(listAdapter.getCount() - 1);方式二:xml中设置/Java设置【操作相同属性】(项比较少的时候会显示在屏幕下方——上面空白,添加项的时候会将项往上面赶)
android:stackFromBottom="true"android:transcriptMode="alwaysScroll"java代码设置这样的属性也可以:
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);listView.setStackFromBottom(true);
- Android中ListView与适配器ArrayAdapter,SimpleAdapter,定义BaseAdapter适配器,ListView添加headerView,ListView滚动到最后一项
- ListView (3) 之适配器 ArrayAdapter/SimpleAdapter/BaseAdapter
- Android UI设计:ListView适配器——ArrayAdapter、SimpleAdapter与BaseAdapter
- ListView适配器--ArrayAdapter;SimpleAdapter;SimpleCursorAdapter
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(3)
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(1)
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(2)
- listView、baseAdapter、arrayAdapter、simpleAdapter
- BaseAdapter适配器 添加数据 显示到ListView中
- 关于ListView使用BaseAdapter和SimpleAdapter适配器
- 【Android】ListView与SimpleAdapter适配器的使用
- Android之ListView使用方法-ArrayAdapter-SimpleAdapter-BaseAdapter
- ArrayAdapter适配器和SimpleAdapter适配器以及ListView的使用
- android listview的适配器------baseadapter
- Android中ListView常用的两种适配器ArrayAdapter和SimpleAdapter使用
- ListView适配器--ArrayAdapter
- SimpleAdapter适配器填充ListView
- ListView使用SimpleAdapter适配器
- Mongodb 查询文档
- HDU 5438(并查集 + dfs)
- ios开发——宏定义实现NSLog不打印设置
- [HDU1301]-Jungle Roads(最小生成树)
- IOS APP因为广告方面被拒解决方案
- Android中ListView与适配器ArrayAdapter,SimpleAdapter,定义BaseAdapter适配器,ListView添加headerView,ListView滚动到最后一项
- 导出页面div中的图
- 美团外卖手机网页版数据加密解析
- js中typeof与instanceof用法
- Android Fragment 真正的完全解析(下)
- 四大组件Activity的工作过程
- RecycleView添加分割线。
- ASCII,UNICODE与UTF-8
- 原生JS中如何获取CSS属性中的值