ListView 使用笔记
来源:互联网 发布:网络女王sm聊天室 编辑:程序博客网 时间:2024/05/17 03:29
在ScrollView 里面包含有一个ListView时,ListView只能显示一行多一点。
原因是ScrollView无法计算ListView的高度。
解决办法是在代码中计算ListView的高度。
ListView listview = (ListView) findViewById(R.id.lv);listview.setAdapter(adapter);setListViewBaseOnChild(listview);
private void setListViewBaseOnChild(ListView lv) {// TODO Auto-generated method stubListAdapter adapter = lv.getAdapter();//itemTotalHeightint itemTotalHeight = 0;for(int i=0;i<adapter.getCount();i++){View listItem = adapter.getView(i, null, lv);listItem.measure(0, 0);itemTotalHeight +=listItem.getMeasuredHeight();}//dividedTotalHeightint dividedTotalHeight = (adapter.getCount() - 1)*lv.getDividerHeight();ViewGroup.LayoutParams params = lv.getLayoutParams();params.height = itemTotalHeight + dividedTotalHeight;lv.setLayoutParams(params);}
这种解决方法可以正常显示ListView了,但会导致ListView滑动复用机制消失,有多少item会一次性全部创建,当item很多时,会造成内存等性能问题。
ArrayAdapter
当data是数组或者List时,用ArrayAdapter,指定一个TextView显示数组或者List中对象的toString返回的String。
ListActivity、ListFragment
默认含有一个ListView,通过setListAdapter(adapter)设置ListView的adapter。
可以让ListActivity使用自定义的ListView,将ListView的 id 设置成 android:id="@android:id/list" ,然后setContentView(layout)
当ListView为空时,隐藏该ListView,并显示id是 @android:id/empty 的view,可以用来显示错误信息
当数据是数组或者List时,可以自定义Adapter继承ArrayAdapter,简单些。
ListView性能优化
getView()时花销时间和cpu还有内存的地方主要在 inflater XML文件到构建成Object 和 findViewById()。
用convertView 可以减少 inflater XML文件到构建成Object 的花销
用ViewHolder可以减少 findViewById()的花销
@Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; // reuse views if (rowView == null) { LayoutInflater inflater = context.getLayoutInflater(); rowView = inflater.inflate(R.layout.rowlayout, null); // configure view holder ViewHolder viewHolder = new ViewHolder(); viewHolder.text = (TextView) rowView.findViewById(R.id.TextView01); viewHolder.image = (ImageView) rowView .findViewById(R.id.ImageView01); rowView.setTag(viewHolder); } // fill data ViewHolder holder = (ViewHolder) rowView.getTag(); String s = names[position]; holder.text.setText(s); if (s.startsWith("Windows7") || s.startsWith("iPhone") || s.startsWith("Solaris")) { holder.image.setImageResource(R.drawable.no); } else { holder.image.setImageResource(R.drawable.ok); } return rowView; }
Store the selection of a View
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, ss));getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, ss));getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubToast.makeText(this, getListView().getCheckedItemCount(), 1).show();return true;}
setChoiceMode()要和对应的layout配合使用。
这里当item被选中时,onOptionsItemSelected()为什么没被调用呢?
- C# ListView 使用笔记
- ListView 使用笔记
- 【笔记】ListView的使用
- listview使用笔记
- 【Android学习笔记】ListView使用SimpleAdapter适配器
- Android学习笔记--ListView使用过程
- Android学习笔记06:ListView的使用
- listview、gridview的setOnScrollListener使用(个人笔记)
- 【Android学习笔记】ListView的使用
- android学习笔记之ListView使用
- 学习笔记——ListView的使用
- Android复习笔记(12)- listView的使用
- Android开发笔记----listview的使用
- 学习笔记4: ListView使用总结
- 【Android学习笔记】ListView使用SimpleAdapter适配器
- Android学习笔记--7.listView的使用
- Android学习笔记8--ListView使用
- android 学习笔记4-ListView使用
- 提交到app store遇到checksum validation failed和an ssl error has occurred and a secure connection to the se
- js面向对象编程,定义接口
- android hasSystemFeature函数
- 天空海阔,任我遨游
- springMVC初接触
- ListView 使用笔记
- 有用的AS3库
- 还是A+B(HDOJ)
- 浏览器的重绘与重排
- typedef用法小结
- Tomcat 系统架构与设计模式【设计模式分析】
- java ftp org.apache.commons.net.io.CopyStreamException
- android activity&service的生命周期
- 互联网联想的事实