Listview学习(一)
来源:互联网 发布:信盈达 知乎 编辑:程序博客网 时间:2024/05/17 05:56
Listview学习(一)
Listview是安卓中非常常用的控件。下边是一些学习过程中的总结。
使用方法:
1.加载数据,数据类型可以是list,map,set等基本类型的相关类。
2.新建adapter,adapter比较常用的是arrayadapter,或者是复写baseadapter的getview方法得到的自定义adapter。
3.将adapter绑定到listview上
一个简单的示例如下:
package com.bupt.markfavor.demo0910listview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends AppCompatActivity { private ListView listView; private ArrayAdapter adapter; public static String[]data=new String[]{"apple","banana","ananas","watermelon","apricot", "blackberry","cherry","coconut","cumquat","fig","fresh"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 1.普通listview listView = (ListView) findViewById(R.id.listview); adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data); listView.setAdapte`````````(adapter); }}
这个例子看起来并不复杂,但是在实际使用当中却有很多问题。当listview当中的item数量过多时,过快滑动条目会产生明显的卡顿现象。这是因为listview的每一个条目在使用过程中会不断地调用adapter里getview来获取新的内容,当条目数量过多滑动速度过快时,会重复加载新的view对象,不管该对象之前是否被加载过。因此,在实际使用中更多的时候是自定义adapter,在getview方法中定义viewholder,缓存已经出现过的条目,再利用convertview来进行判断该条目是否出现过,是否可以加载缓存。这样可以提升listview的效率。代码如下:
public class MainActivity extends AppCompatActivity { private ListView listView; private ArrayAdapter adapter; public static String[]data=new String[]{"apple","banana","ananas","watermelon","apricot", "blackberry","cherry","coconut","cumquat","fig","fresh"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//// 1.普通listview// listView = (ListView) findViewById(R.id.listview);// adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);// listView.setAdapter(adapter); //2.自定义adapter的listview,提升运行效率 listView=(ListView)findViewById(R.id.listview); MyAdapter myAdapter = new MyAdapter(this); for (int i =0;i<=50;i++){ myAdapter.addItem("item"+i); } listView.setAdapter(myAdapter); }}
下面是自定义adapter,实现了检查convertview是否有缓存,用viewholder装载布局文件。
package com.bupt.markfavor.demo0910listview;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.ArrayList;import static android.content.ContentValues.TAG;/** * Created by markfavor on 2017/9/13. */public class MyAdapter extends BaseAdapter { private ArrayList<String>myData = new ArrayList<>(); private LayoutInflater myInflater; public MyAdapter(Context context) { super(); myInflater=LayoutInflater.from(context);// myInflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);效果与上句相同 } public void addItem(String a){ myData.add(a); notifyDataSetChanged();//通知所有与已经改变数据相关联的观测者应当刷新数据 } @Override public int getCount() { return myData.size(); } @Override public Object getItem(int position) { return myData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; Log.d(TAG, "getView: "+position+","+convertView); if (convertView==null){ holder=new ViewHolder(); convertView=myInflater.inflate(R.layout.item1,null); holder.textview= (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } holder.textview.setText(myData.get(position)); return convertView; } public static class ViewHolder{ public TextView textview; }}
item1.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="50dp" android:gravity="center_vertical" android:text="text" /></LinearLayout>
阅读全文
0 0
- ListView学习(一)
- ListView实例学习一
- ListView学习笔记(一)
- ListView学习(一)
- Listview学习(一)
- ListView学习(一)-ListView使用
- [C# 控件学习一]TreeView ListView
- Android-ListView的学习(一)
- Android之UI学习篇十一:ListView控件学习(一)
- C# 学习笔记(一) ListView控件显示数据库表信息
- android学习笔记一(ListView的使用)
- 【学习笔记】"ListView滑动删除 ,仿腾讯QQ"(一)
- Android ListView&异步加载的学习(一)
- Android学习笔记二十三之ListView列表视图一
- Android基础学习笔记之-ListView用法(一)
- ReactNative之ListView学习总结(一)简单demo
- Android学习笔记二十三之ListView列表视图一
- 开源控件学习之-侧滑listview进行删除(一)(自定义listview)
- python爬虫自动提交HDU并获取AC状态(p3+request+Beatifulsoup)
- Netty4实战第五章:Buffers
- composer
- 关于ubuntu12.04中遇到Trash垃圾箱中文件无法手动删除问题
- IEEE 网络协议-局域网标准
- Listview学习(一)
- 【喜报】报刊社新增成员
- Angular环境配置
- 剑指Offer--1.二维数组的查找
- Java之String、StringBuffer、StringBuilder
- Ubuntu+anaconda环境里安装opencv
- JZOJ5360. 【NOIP2017提高A组模拟9.12】Shorten Diameter
- MITM arpspoof ARP 欺骗
- 超简单配置你的 oh my zsh