码迷,mamicode.com
首页 > 移动开发 > 详细

Android之ListView

时间:2016-03-12 18:47:39      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:

作用:以item的形式用来显示大量的数据。

使用步骤:

1.XML中使用<ListView>标签

2.Dada —> String[]数组(数据来源)

3.ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data); –>适配器(用来将数据和控件进行绑定

4.  myListView.setAdapter(adapter); –>设置适配器

PS.

simple_list_item_1 (单行显示) 只有一个TextView

simple_list_item_2 (双行显示) 有两个TextView

二.定值ListView界面  -- 使用ArrayAdapter

使用步骤:

1.定制实体类。

2.自定义item布局。

3.自定义适配器,继承ArrayAdapter。

4.重写两个方法,构造方法MyAdapter(Context context, int resource, List<T> objects)和getView()方法。

public class FruitAdapter extends ArrayAdapter<Fruit> {

    private int resourceId;
    private int num = 1;  // 调用了几次的getView方法
    private int num1 = 1; // 重新创建了几次的convertView
    private int num2 = 1; // 重用了几次的convertView

    public FruitAdapter(Context context, int resource, List<Fruit> objects) {
        super(context, resource, objects);
        resourceId = resource;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.d("h_bl", "num="+num);
        num+=1;
        Fruit fruit = getItem(position);
        View view;
        ViewHolder viewHolder;
        Log.d("h_bl", "convertView="+convertView);
        if (convertView == null) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
            viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name);
            view.setTag(viewHolder); // 将ViewHolder存储在View中
            Log.d("h_bl", "num1="+num1);
            num1+=1;
        } else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder
            Log.d("h_bl", "num2="+num2);
            num2+=1;
        }
        viewHolder.fruitImage.setImageResource(fruit.getImage());
        viewHolder.fruitName.setText(fruit.getName());

        return view;
    }

    class ViewHolder {
        ImageView fruitImage;
        TextView fruitName;
        
    }
}

其中,

LayoutInflater.from(getContext()).inflate(resourceId, null);

inflate()作用有点类似findViewById(),寻找layout下的xml布局文件。

// 加载布局管理器
LayoutInflater inflater=LayoutInflater.from(context);
// 将xml布局转化为View对象
View view=inflater.inflate(R.layout.fruit_item,null);
// 利用View对象,找到布局中的控件
view.findViewById(R.id.fruit_image);

ListView的工作原理:

1、ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。
2、一个新的视图被返回并显示。

总结为如下:

技术分享

详见:

http://www.bkjia.com/Androidjc/1037874.html

http://www.bkjia.com/Androidjc/1037874.html

三 .使用ViewHolder提升ListView的运行效率:

作用:

1.重用convertView (转换视图) --可以理解为 被移除去的item的view。

2.对控件实例进行缓存。

第一次加载时:技术分享

滑动:

技术分享

原理解释:

view.setTag(viewHolder); // 将ViewHolder存储在View中

1.将控件的实例到View中,所以说每个item的view都绑定了控件的实例,实现对控件的实例进行缓存。

2.重用convertView,并将convertView绑定的控件的实例取出,重新复制。达到重用的目的。

使用ViewHolder可能带来的问题

http://blog.csdn.net/harvic880925/article/details/25335957

四.ListView的点击事件:

listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Fruit fruit=fruitList.get(position);
                Toast.makeText(getApplicationContext(), fruit.getName(), Toast.LENGTH_SHORT).show();
                
            }
        });

 

Android之ListView

标签:

原文地址:http://www.cnblogs.com/H-BolinBlog/p/5269596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!