ListView的用法 - 第一行代码—android学习笔记
2016-06-12 22:45
281 查看
构造ListView的步骤
确定并构造要显示的数据类型以及数据设计并编写ListView中Item的布局
构造相应的Adapter类以便将数据传入ListView
在主活动中编写相应代码,将数据通过Adapter导入ListView
ArrayAdapter的构造函数:
1. 参数: ArrayAdapter(Context context, int textViewResourceId, List<...> objects) ArrayAdapter(Context 当前上下文, int ListView子项布局的ID,List 要适配的数据); 例:ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, R.layout.list_item, data); 2. 继承方法代码: private int resourceId; public ItemAdapter(Context context, int textViewResourceId, List<...> objects) { super(context, textViewResourceId, objects); resourceId = textViewResourceId }
ArrayAdapter的getView方法
每个子项被滚动到屏幕,也就是需要被显示的时候被调用,本意是加载这个子项,因此需要相应地被重写。 public View getView(int position, View convertView, ViewGroup parent) { ItemType item = getItem(position); View view = LayoutInflater.from(getContext()).inflate(resourceId, null); //加载该item的资源 return view; }
ListView的setAdapter方法:
构建完ArrayAdapter后,就可以使用ListView的setAdapter方法建立关联。 例:listView.setAdapter(adapter);
提高ListView效率 - convertView
由于getView()每次都重新加载布局,快速滚动的时候对性能是很大的考验。getView还有一个convertView参数,可以用来将之前加载好的布局暂时存储,以便之后使用。 public View getView(int position, View convertView, ViewGroup parent) { ItemType item = getItem(position); View view; if (convertView == null) view = LayoutInflater.from(getContext()).inflate(resourceId, null); else view = convertView; //加载该item的资源 return view; }
提高ListView效率 - ViewHolder
由于getView()依旧每次都要加载资源,我们可以借助ViewHolder进行性能优化,提升快速滚动的性能。 public View getView(int position, View convertView, ViewGroup parent) { ItemType item = getItem(position); View view; ViewHolder viewHolder; if (convertView == null) { view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder(); viewHolder.xxx = (xxView) view.findViewById(R.id.xxx); viewHolder.xxx = (xxView) view.findViewById(R.id.xxx); //同加载各种资源 view.setTag(viewHolder); } else { view = converView; viewHolder = (ViewHolder) view.getTag(); } return view; } class ViewHolder { xxView xxx; xxView xxx; //各种资源 }
ListView的点击事件
通过ListView的setOnItemClickListener()即可,当然智能编写器中下面这段应该是自动生成的。 例:listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //要发生的事情 } })
相关文章推荐
- 5.乐学成语-----------显示动物类成语列表
- 安卓系统按键映射修改
- Android-银联支付开发
- AS中jar包和aar包的导出与导入
- android 左右滑动实现切换背景
- RecycleView简单使用
- 可扩展的listview
- 4.乐学成语----------显示学习列表
- Android开发——Bitmap,byte[],Drawable相互转化
- Android Studio 事件分发机制笔记
- android应用程序如何调用支付宝接口
- 3.乐学成语----------显示主界面
- Android: Intent详细使用方法
- Android5.0的Palette(调色板)、视图阴影、着色和裁剪介绍
- Android touch 事件传递机制
- java.util.zip.ZipException: duplicate entry: com/nineoldandroids/animation/Animator$AnimatorListener
- android里图片下载工具类AsyncImageLoader分析
- 关于Android中的SharedPreferences的介绍
- Android 开发之setFocusable 焦点问题
- [Android]fill_parent与match_parent区别