ListView的初级使用手记

这只是我在学Android过程中对于所学知识的巩固和方便日后查询的学习笔记,能帮助到有需要的和我一样的初学者就更好了

首先

ListView、Adapter、List<objects>是必不可少的 <listView> //此中属性自定 </listView>

Adapter为ArrayAdapter,默认只能解析List<String>,也就是<listView>中只有一个Textview。

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<News>{
    private int  resourseId;//用来保存ListView加载的布局的资源id
    public MyAdapter(Context context, int resourse, List<News> objects){
    super(context ,resourse, objects);
    resourseId=resourse;      //从构造函数中获取布局资源id
}

@override
public View getView(int position ,View ConverView ,ViewGroup parent){
    News news=getItem(position);
//个人理解,通过position获取每一条的数据(List<News>中的对应的数据)
    View view=LayoutInflater.from(getcontext).inflate(resourceId ,parent ,false);
    TextView title=......;            TextView content=.....;
    titile.setText(news.getTitle);
    content.setText(news.getContent);
    return view;
}   

4、最后当然是需要一个保存News类对象的集合

public static List<News> newsList=new ArrayList();
//此集合中的数据大多数都是从HttpURLConnection或okHttp中解析出来的数据;
//只需在解析时不断new出News对象并添加至newsList中即可

优化

每次用到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来实现

注意事项

从网络解析json或xml内容是由于受到网络情况和机器运行等多种情况的影响可能会报错,错误原因大致为数据发生变化而adapter并未notifyDataChanged;基本就是储存数据的集合并未更新完而执行了ListView的相关显示代码,从而数据不一致导致的;每当从网络加载信息时我都用AsyncTask来解决,当数据加载完毕再执行相关的ListView显示代码即可;

如有错误欢迎指出

结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容