ListView的使用

来源:互联网 发布:淘宝怎么设置登录验证 编辑:程序博客网 时间:2024/06/03 17:54

Use ListView

ListView是用于将子项展示成垂直滚动的一个控件,其子项通常来源于一个适配器(Adapter),其在界面上的一般情况如下图所示:

这里写图片描述

接下来让我们一起实现一个简单的ListView的例子,打开Android Studio,新建ListViewDemo项目并修改其xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.tt.listviewdemo.MainActivity">    <ListView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="wrap_content">    </ListView></RelativeLayout>

如上在xml文件中使用<listview>标签即可在布局中添加一个ListView,这里我们指定ListView的宽度适配父控件,高度包裹自身.
前面有讲到ListView中的子项item来源于适配器,接下来我们为这个ListView添加适配器,新建ListViewAdapter类并让其继承自BaseAdapter,实现其抽象方法,初步的类内容如下所示:

import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** * Add Some Comment */public class ListViewAdapter extends BaseAdapter{    private static final String TAG = "ListViewAdapter";    @Override    public int getCount() {        return 0;    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        return null;    }}

其中getCount()方法返回的是该列表一共有多少个子项,getItem()返回的是当前子项的数据对象,getView()返回的是当前子项按照数据对象所初始化得到的View对象,这里我们就简单的实现一个单行文本的LiseView.

大概了解了各个覆写函数的作用,接下来我们给ListViewAdapter添加构造器已方便使用,由于我们在getView()方法中需要根据数据对象构造View,难免需要获取Resource下的部分资源,因此我们将拥有该ListView的Activity的上下文传入.修改后的ListViewAdapter内容如下:

import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;/** * Created by tuozhaobing on 15-12-6. * adapter for listview */public class ListViewAdapter extends BaseAdapter{    private static final String TAG = "ListViewAdapter";    private Context mContext;    public ListViewAdapter(Context context) {        this.mContext = context;    }    @Override    public int getCount() {        return 50;    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        TextView textView = new TextView(mContext);        textView.setText("我是ListView的第"+position+"个子项(TextView)");        return textView;    }}

这里我已经完成了ListViewAdapter的getView()方法,让绑定这个适配器的ListView是一个拥有50个TextView子项的列表,至此,我们完成了适配器的编写,那么剩下的工作就是让我们的ListView从适配器中拿子项了,我们通过findViewById(ResourceId)找到该ListView,通过setAdapter(Adapter)方法为该ListView添加适配器.详细代码如下所示:

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;public class MainActivity extends AppCompatActivity {    private ListView mListView;    private ListViewAdapter mListViewAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initData();    }    public void initView(){        mListView = (ListView)findViewById(R.id.listview);        mListViewAdapter = new ListViewAdapter(this);    }    public void initData(){        mListView.setAdapter(mListViewAdapter);    }}

关于为什么要使用自己的initView()initData()请参考Android Component中,Activity中的介绍和解释.
运行效果如下图(注意Adapter的position是从0开始的):
这里写图片描述

源码下载

0 0
原创粉丝点击