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

Android学习(三)——关于ListView的学习

时间:2016-07-21 23:35:10      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

    这一章,我们来说说ListView这个组件。ListView是一个非常常用,并且有用的组件。可能说说还没有建立对该组件的印象。比如我们的歌单便可以用这个组件进行实现。

    最近,偶尔会逛逛博客园,发现了一个博主说RecyclerView代替了ListView。毕竟刚接触Android,我收藏了相关的博客,有时间进行学习。当然在这一章中,我们还是对ListView这个组件进行说明。虽然组件会更新,但是很多基本的方法还会延续下去。

 

——————————————————华丽丽的分割线——————————————————————

 

    要实现一个完整的ListView需要有好几块的内容:1. 子项目的布局,2. 存储数据的类 3. 整体的布局, 4. adapter(适配器)类 5. 需要添加listview的activity。

 

    首先我们需要定义一个子项布局,其中包含一个ImageView和TexView组件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView android:id="@+id/fruit_image"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        />

    <TextView
        android:id="@+id/fruit_name"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        ></TextView>
</LinearLayout>

    这里可以再编写一个相关的数据类(Fruit),对数据进行存储,其中包括图片的id,以及相关的信息。因为简单,我这边也不编写了。

 

    接着我们开始编写适配器的类了。要实现listview还有其他方法,但是使用adapter比较简单方便,因此使用adapter。其中adapter已经实现的非常好的。因此我们在编写Adapter类是可以继承arrayadapter:

public class FruitAdapter extends ArrayAdapter<Fruit> {
    private int resourceId;
    public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects) {
        super(context,textViewResourceId,objects);
        resourceId = textViewResourceId;
    }
    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view = LayoutInflater.from(getContext()).inflate(resourceId,null);
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
    }
}

    其中除了构造方法外,我们还需要关注getView这个方法。这个方法与listview添加每一个子项息息相关!在getView中有一个参数是converView,这个参数用于将之前加载好的布局进行缓存,这样能方便以后进行重用。运用这个参数我们可以提高ListView的运行效率:

    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view;
        if(convertView == null ) {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        }else {
            view = convertView;
        }
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
    }

继续进化,使用一个viewHolder的类,对相关的数据进行记录:

    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit = getItem(position);
        View view;
        ViewHolder viewHolder;
        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);
        }else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;
    }
    class ViewHolder {
        ImageView fruitImage;
        TextView fruitName;

    }

在进行之后,将在主要的,类似的代码如下:

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
        ListView listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(adapter);

 

Android学习(三)——关于ListView的学习

标签:

原文地址:http://www.cnblogs.com/carels/p/5693347.html

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