ListView的初级使用手记
这只是我在学Android过程中对于所学知识的巩固和方便日后查询的学习笔记,能帮助到有需要的和我一样的初学者就更好了
首先
ListView、Adapter、List
Adapter为ArrayAdapter,默认只能解析List,也就是
List集合当然也是String类型的了
使用时
private Listview listview;
private ArrayAdapter adapter;
listview=..........;
adapter=new ArrayAdapter(context,android.R.layout.simple_list_item_1,data);
listview.setAdapter(adapter);
context不多说;
中间为默认加载的item布局;
data自然是想要解析在ListView中的String类型数据集合了。
然而
这种简单的表现显然不能满足每一条中类似新闻的图片、标题、正文并存的情况
所以
1、在layout资源文件夹中新建一个布局文件item.xml。此文件中可进行想要的布局排版等;
2、由于之前ArrayAdapter默认支持String类型而现在item中显然内容丰富,所以要创建一个所要加载的资源的类;比如我想在每一条中显示新闻的标题和摘要,那么
public class News{//adapter所要加载的类
private String title;
private String content;
GETTER;
SETTER
}
3、新建MyAdapter类继承ArrayAdapter
public class MyAdapter extends ArrayAdapter
4、最后当然是需要一个保存News类对象的集合
public static List
优化
每次用到ListView是都重新加载很显然对于性能来讲是不合适的,所以可以使用getView方法中的ConverView参数(为了避免重复加载布局文件item)和自定义内部类ViewHolder(为了避免重复加载item中的TextView、ImageView等组件)
public class MyAdapter extends ArrayAdapter{
private int resourseId;
public MyAdapter(Context context, int resourse, List objects){
super(context ,resourse, objects);
resourseId=resourse;
}@override
public View getView(int position ,View ConverView ,ViewGroup parent){
View view;ViewHolder holder;
News news=getItem(position);
if(ConverView==null){//无缓存
view =LayoutInflater.from(getContext).inflate(resourseId,parent,false);
holder=new ViewHolder();
holder.title=(TextView)findViewById(....);
holder.content=(TextView)findViewById(....);
view.setTag(holder);
//将holder存于view中
}else{//有缓存
view=ConverView;
holder=(ViewHolder)view.getTag();
//获取ViewHolder对象
}
holder.title.setText(news.getTitle);
holder.contetn.setText(news.getContent);
returen view;
}class ViewHolder{//用于缓存控件对象的内部类
TextView title;
TextView content;
}
ListView的点击事件
ListView的点击事件很容易
listview.setOnItemClickListener(new AdapterView.onItemClickListener(){
@override
public void onItemClick(AdapterView> parent ,View view ,int position ,long id){
//具体的逻辑
}
});
ListView的点击只对整个条目有效,无法细分至比如每一条中的ImageView或者TextView去执行不同的点击响应,此实现可有RecyclerView来实现
注意事项
【ListView的初级使用手记】从网络解析json或xml内容是由于受到网络情况和机器运行等多种情况的影响可能会报错,错误原因大致为数据发生变化而adapter并未notifyDataChanged;基本就是储存数据的集合并未更新完而执行了ListView的相关显示代码,从而数据不一致导致的;每当从网络加载信息时我都用AsyncTask来解决,当数据加载完毕再执行相关的ListView显示代码即可;
如有错误欢迎指出
结束
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量