在安卓开发中,listview是最为常用的组件,它主要是以列表的形式展现数据内容。
列表的显示需要三大部分:
1.listview 用于显示view
2.adapter 是listview和数据源之间的中间人
3.数据
接下来以一个简单的案例来展示用listview展现数据的过程。首先要设计好listview容器,这里的显示布局就是中上方显示一张图片,然后下面紧接着显示listview:
<?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="120dp"
android:layout_gravity="center"
tools:context=".ListViewActivity"
android:background="@color/grey">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:id="@+id/imageView"
android:src="@mipmap/line"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/imageView"
android:id="@+id/list_view"></ListView>
</RelativeLayout>
然后在Activity中找到listview控件,将其与adapter绑定,并将数据转给adapter:
public class ListViewActivity extends AppCompatActivity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view);
mListView=(ListView)findViewById(R.id.list_view);
String[] words={"数据1","数据2","数据3","数据4","数据5"};
WeChatAdapter weChatAdapter=new WeChatAdapter(ListViewActivity.this,words);
mListView.setAdapter(weChatAdapter);
}
}
接着创建listview中具体item的布局,即一个textview:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_word"
android:text="lala"
android:background="@color/white"/>
</LinearLayout>
然后在adapter中要实现相应的方法,其中比较重要的是getView方法,当每条数据进入可见区时,此方法就会被调用,返回代表具体数据的视图:
public class WeChatAdapter extends BaseAdapter{
private Context mContext;
private LayoutInflater mLayoutInflater;//解析Layout
private String[] mWords;
public WeChatAdapter(Context context,String[] words) {
mContext = context;
mLayoutInflater=(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mWords = words;
}
@Override
public int getCount() {//有多少数据
return mWords.length;
}
@Override
public Object getItem(int i) {//返回某条数据对象
return mWords[i];
}
@Override
public long getItemId(int i) {//返回数据id
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {//返回某数据的视图,和数据之间进行绑定,每一行数据显示在界面
view=mLayoutInflater.inflate(R.layout.item_words,null);
TextView mTextWord=(TextView) view.findViewById(R.id.item_word);//获取控件
mTextWord.setText(mWords[i]);//设置数据
return view;
}
}