android listview 用法

来源:互联网 发布:在绿城工作怎么样知乎 编辑:程序博客网 时间:2024/05/22 13:31

ListView

ListView是android常用组件,常用于显示一堆数据,类似web ui中的datatable。

ListView展示数据的步骤

  • 定义item布局
  • 定义数据源
  • 将item布局和数据源放入适配器
  • 将适配器与listview关联

最简单的listview

  • item布局文件,这里我们使用android自带的布局文件,android.R.layout.simple_list_item_1

它里边只有一个textview

<TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@android:id/text1"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:textAppearance="?android:attr/textAppearanceListItemSmall"    android:gravity="center_vertical"    android:paddingStart="?android:attr/listPreferredItemPaddingStart"    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"    android:minHeight="?android:attr/listPreferredItemHeightSmall"/>
  • 定义数据源,将item布局和数据源放入适配器,将适配器与listview关联

activity代码

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.main_layout);        ListView lv = (ListView) findViewById(R.id.lv1);        String[] fruits = {"apple","orange","beach","mango"};        ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fruits);        lv.setAdapter(adapter);    }
  • 最后,主界面的布局文件
   <ListView         android:id="@+id/lv1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        ></ListView>

效果图

这里写图片描述

自定义ListView

有时,我们需要自定义显示多列,列中有图片,说明之类的。自定义说到底就是改变item布局文件

item布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >         <ImageView android:id="@+id/myface"          android:layout_width="wrap_content"        android:layout_height="wrap_content"        />     <TextView android:id="@+id/myname"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:layout_marginLeft="10dp"        /></LinearLayout>

适配器

public class FruitAdapter extends ArrayAdapter<Fruit> {    private int resourceId;    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) {        Fruit fruit = getItem(position);        View view = LayoutInflater.from(getContext()).inflate(resourceId, null);        ImageView imageView= (ImageView) view.findViewById(R.id.myface);        TextView textView = (TextView) view.findViewById(R.id.myname);        imageView.setImageResource(fruit.getImageId());        textView .setText(fruit.getName());        return view;    }}   
public class Fruit {    private String name;    private int imageId;}

getView方法介绍
getView: item滚入到屏幕中时,被调用
第一个参数:position,item在数据源中的位置
第二个参数:convertView,这个参数要重点理解,convertView是滚出屏幕的那个item的布局,在优化ListView时,常常会用这个变量。这样在滚入item时,使用滚出item的布局,然后把值覆盖掉。

优化后的代码
优点:不用每次都加载布局文件

@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 imageView = (ImageView) view.findViewById(R.id.myface);        imageView.setImageResource(fruit.getImageId());        TextView textView = (TextView) view.findViewById(R.id.myname);        textView.setText(fruit.getName());        return view;  }

效果

这里写图片描述

0 0
原创粉丝点击