赞
踩
View是视图文件,表示页面的框架结构。Adapter适配器,通过适配器填充数据信息。
ListView用来显示一个相同样式的视图列表。
ListView无法直接将数据显示,需要先将Data数据放入Adapter适配器,然后ListView绑定适配器。
操作步骤:
1.在layout布局中创建ListView;
2.在layout对应ActivityActivity中创建对应ListView对象listView;
3.创建数据ArrayList<String>类型的list;
4.创建ListViewAdapter类继承BaseAdapter,在Activity中创建ListViewAdapter类对象listViewAdapter,传入参数list,上下文;
5.调用listView对象的setAdapter方法,绑定listViewAdapter;
示例:
创建t_listview.xml文件,ListView标签,设置id。
- <?xml version="1.0" encoding="utf-8"?>
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
- android:orientation="vertical"
-
- android:layout_width="match_parent"
-
- android:layout_height="match_parent">
-
- <ListView
-
- android:id="@+id/ListView1"
-
- android:layout_width="match_parent"
-
- android:layout_height="match_parent">
-
- </ListView>
-
- </LinearLayout>
创建ListViewAdapter类继承BaseAdapter类。
- public class ListViewAdapter extends BaseAdapter {
-
- private ArrayList<String> strlists;
-
- private Context mContext;
-
- public ListViewAdapter(ArrayList<String> list,Context context){
-
- this.strlists=list;
-
- this.mContext=context;
-
- }
-
-
- //获取list大小
-
- @Override
-
- public int getCount() {
-
- return strlists.size();
-
- }
-
- @Override
-
- public Object getItem(int position) {
-
- return null;
-
- }
-
- @Override
-
- public long getItemId(int position) {
-
- return position;
-
- }
-
- //创建空的View,放入数据
-
- //position当前位置
-
- //ViewGroup parent:每次调用都有一个空容器,返回值的view添加到空容器,getContext方法获取容器context
-
- //convertView:ItemView显示内容
-
- @Override
-
- public View getView(int position, View convertView, ViewGroup parent) {
-
- //创建一个空TextView
-
- TextView textView = new TextView(mContext);
-
- //设置宽高
-
- textView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
-
- AbsListView.LayoutParams.WRAP_CONTENT));
-
- //设置文本大小
-
- textView.setTextSize(30);
-
- //设置文本
-
- textView.setText(strlists.get(position));
-
- return textView;
-
- }
-
- }
创建ListViewActivity类继承Activity。
- public class ListViewActivity extends Activity {
-
- //上下文
-
- private Context mContext;
-
- private ListView listView;
-
- @Override
-
- protected void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
-
- //绑定layout
-
- setContentView(R.layout.t_listview);
-
- //上下文初始化
-
- mContext = ListViewActivity.this;
-
- //获取ListView
-
- listView = (ListView) findViewById(R.id.ListView1);
-
- //创建数据list
-
- ArrayList<String> list = new ArrayList<String>();
-
- //添加数据
-
- for(int i=0;i<5;i++){
-
- list.add("listView"+i);
-
- }
-
- //创建ListViewAdapter对象
-
- ListViewAdapter listViewAdapter = new ListViewAdapter(list,mContext);
-
- //ListView绑定Adapter
-
- listView.setAdapter(listViewAdapter);
-
- }
-
- }
1.使用LayoutInfalter优化
当ListView中的内容不是简单的字符串表时,ListViewAdpater类中的getView方法中就不是简单创建一个TextView可以解决问题,需要创建多个View组件,这个时候,我们需要根据ListView中子Item的结构自动生成View组件。
示例:
创建子Item的布局文件t_listview_item.xml。
- <?xml version="1.0" encoding="utf-8"?>
-
- <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:id="@+id/tv1"
-
- android:layout_width="match_parent"
-
- android:layout_height="wrap_content"
-
- android:textSize="30dp">
-
- </TextView>
-
- </LinearLayout>
修改getView方法中逻辑:
- //LayoutInflater类将一个布局变成一个类
-
- LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
-
- //inflate参数1:布局页面,参数2:root是否加入到某个容器
-
- View view = layoutInflater.inflate(R.layout.t_listview_item,null);
-
- TextView textView = view.findViewById(R.id.tv1);
-
- textView.setText(strlists.get(position));
-
- return view;
Android提供一些固定的子Item布局:
示例:
- //android提供了一些布局页面android.R.layout.XXXX
-
- //示例:android.R.layout.simple_list_item_1
-
- View view1= layoutInflater.inflate(android.R.layout.simple_list_item_1,null);
2.使用convertView优化
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。