Android最常用而又最难用控件—ListView(三)。
来源:互联网 发布:java inputstream 编辑:程序博客网 时间:2024/05/29 02:39
使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。BaseAdapter的灵活性就在于它要重写很多方法。
1.getCount()–>要绑定的条目的数目,比如格子的数量
2.getItem()–>根据一个索引(位置)获得该位置的对象
3.getItemId() –>获取条目的id
4.getView(final int position, View convertView, ViewGroup parent)–>获取该条目要显示的界面
- 注:
当系统开始绘制ListView的时候,首先调用getCount()方法。得到它的返回值,即ListView的长度。然后系统调用getView()方法,根据这个长度绘制ListView的每一行。
adapter先从getCount里确定数量,然后循环执行getView方法将条目一个一个绘制出来,所以必须重写的是getCount和getView方法。而getItem和getItemId是调用某些函数才会触发的方法,如果不需要使用可以暂时不修改。
这里我就直接贴代码和步骤:
1.自定义一个adapter,继承BaseAdapter,并重写其中的4个方法
注意:
- ListView控件的使用发现还有很多细节可以优化,其中目前的运行效率是很低。当ListView快速滚动的时候,适配器中的一个getView()方法会将要显示的布局重新加载一次。为了提高这个效率,需要重写适配器类中的getView()方法。
ListView控件的使用发现还有很多细节可以优化,例如假如在getView()方法中调用view中的findViewById(0方法来获取一次控件的实例。这种情况需要借助一个ViewHolder来对这部分性能进行优化。
具体代码如下:
public class MyAdapter extends BaseAdapter { private String[] colorsName; private Context context; private int[] imageId; //利用构造传递数据 public MyAdapter(String[] colorsName, Context mcontext, int[] imageId) { this.colorsName = colorsName; this.context = mcontext; this.imageId = imageId; } //绑定列表的子项目数 @Override public int getCount() { return colorsName.length; } //根据索引(位置)获取该位置对象 @Override public Object getItem(int position) { return null; } //获取子项的id @Override public long getItemId(int position) { return 0; } //获取子项要显示的界面 @Override public View getView(int position, View convertView, ViewGroup parent) { // LayoutInflater inflater = LayoutInflater.from(context); View view = null; ViewHolder viewHolder; if (convertView == null) { //实例化布局 //inflate()方法参数含义 //第一个参数实例化的布局 //第二个参数为实例化的布局外层再嵌套一层ViewGroup //第三个参数要实例化的布局是否与viewgroup产生关联 view = inflater.inflate(R.layout.listview_item, parent, false); //创建ViewHolder内部类对象 viewHolder = new ViewHolder(); //将找到的空间保存到ViewHolder对象中的成员变量中 viewHolder.imageView = (ImageView) view.findViewById(R.id.imageView); viewHolder.textView = (TextView) view.findViewById(R.id.textView); //将viewHolder存储在view中 view.setTag(viewHolder); } else { //复用视图 view = convertView; //重新获取ViewHolder viewHolder = (ViewHolder) view.getTag(); } viewHolder.imageView.setImageResource(imageId[position]); viewHolder.textView.setText(colorsName[position]); return view; } //定义一个ViewHolderlei class ViewHolder { ImageView imageView; TextView textView; }}
2.布局和子项布局、定义数据源跟前两个一样(不懂参照前两条博客),这里就不多写哈。
3.创建自定义adapter对象
MyAdapter adapter = new MyAdapter(colorName,getApplicationContext(), imageId);
4.设置适配器
ListView listView = (ListView) findViewById(R.id.listView);
5.运行的效果跟SimpleAdapter是一样的,可以参考上条博客。
谢谢大家阅读,有疑问或错误请大家指出,谢谢。
阅读全文
1 0
- Android最常用而又最难用控件—ListView(三)。
- Android最常用而又最难用控件—ListView(一)。
- Android最常用而又最难用控件—ListView(二)。
- Android:最常用和最难用的控件----ListView
- 【Android成长之路】最常用和最难用的控件——ListView的浅谈(ListView 的简单用法)
- 【Android成长之路】最常用和最难用的控件——ListView的浅谈(定制ListView 的界面)
- 【Android成长之路】最常用和最难用的控件——ListView的浅谈(ListView 的点击事件)
- 最常用和最难用的控件——ListView
- 最常用和最难用的控件——ListView
- 最常用和最难用的控件——ListView
- 最常用和最难用的控件——ListView
- 最难用和最常用的控件<ListView>
- 最常用和最难用的控件(ListView)
- 最常用和最难用的控件---ListView
- 最常用的控件ListView
- Android常用控件:ListView
- Android常用控件-ListView
- 【Android成长之路】最常用和最难用的控件——ListView的浅谈(提升ListView 的运行效率)
- 算法提高 ADV-81 数的运算
- Tomcat端口号的配置
- 今日头条笔试8/23第二题
- Redis和消息队列使用实战
- Java基础(四)组合数据类型
- Android最常用而又最难用控件—ListView(三)。
- Python-正则表达式
- Queries Gym
- SpringMVC基础配置
- MySQL数据库、Navicat for MySQL、Workbench的安装
- 刷CCF的算法题(第七天)
- 二叉树(java)
- java-正则、object中的两个方法的使用
- 今日头条8/23第一道编程题