ListView使用浅析

xiaoxiao2021-02-28  102

使用listview时候,需要书写以下几个地方:

1:新建一个l包含istview控件的layout

2:新建一个itemlayout(其中包含listview中item的格式:image+text)

3:新建一个Adapter extends BaseAdapter,这个adapter需要有构造函数(初始化mdata,LayoutInflater),并且重写getCount(),getItem(),getItemId() ,getView()这4个方法。

      还可以新建内部类:ViewHolder(只需将item控件作为变量即可),优化listview的视图缓存模式。

4:在主类中实例化listview和adapter,使用mylistview.setAdapter(myadapter),绑定listview和adapter,实现数据显示。

以下我们使用我们的实例来实现各个步骤:

1:新建一个l包含istview控件的layout

<ListView            android:id="@+id/list"           android:layout_width="fill_parent"           android:layout_height="fill_parent"></ListView>

2:新建一个itemlayout(其中包含listview中item的格式:image+text)

<ImageView                android:id="@+id/image"               android:layout_width="wrap_content"               android:layout_height="wrap_content"/>           <TextView                android:id="@+id/title"               android:layout_width="wrap_content"               android:layout_height="wrap_content"              />  

3:新建一个Adapter extends BaseAdapter,这个adapter需要有构造函数(初始化mdata,LayoutInflater),并且重写getCount(),getItem(),getView()三个方法。

      还可以新建内部类:ViewHolder(只需将item控件作为变量即可),优化listview的视图缓存模式。(类代码来自《Android群英传》)

public class MyAdspter extends BaseAdapter {        private List<Map<String, Object>> data;      private LayoutInflater layoutInflater;      private Context context;      public MyAdspter(Context context,List<Map<String, Object>> data){          this.context=context;          this.data=data;          this.layoutInflater=LayoutInflater.from(context);      }      /**      * 组件集合,对应list.xml中的控件      * @author Administrator      */      public final class Zujian{          public ImageView image;          public TextView title;              }      @Override      public int getCount() {          return data.size();      }      /**      * 获得某一位置的数据      */      @Override      public Object getItem(int position) {          return data.get(position);      }      /**      * 获得唯一标识      */      @Override      public long getItemId(int position) {          return position;      }        @Override      public View getView(int position, View convertView, ViewGroup parent) {          ViewHolder holder=null;          if(convertView==null){              holder=new ViewHolder ();              //获得组件,实例化组件              convertView=layoutInflater.inflate(R.layout.list, null);              holder.image=(ImageView)convertView.findViewById(R.id.image);              holder.title=(TextView)convertView.findViewById(R.id.title);               convertView.setTag(holder);          }else{              holder=(ViewHolder)convertView.getTag();          }          //绑定数据          holder.image.setBackgroundResource((Integer)data.get(position).get("image"));          holder.title.setText((String)data.get(position).get("title"));          return convertView;      }    public final class ViewHolder{ public ImageView Img; public TextView title; }}  

4:在主类中实例化listview和adapter,使用mylistview.setAdapter(myadapter),绑定listview和adapter,实现数据显示。

(这里需要注意的是:因为我们的listview的item是个复杂的数据类型,我们使用的是一个item对应一个map,map中保存了value为image或者title,key为对应的image和text的内容,所有的map组成一个List,并且listview中的adapter初始化为接受(Context,list),这里的list就是我们的显示内容)

public class MainActivity extends Activity {          private ListView listView=null;        @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.activity_main);           listView=(ListView)findViewById(R.id.list);           List<Map<String, Object>> list=getData();           listView.setAdapter(new MyAdspter(this, list));       }       @Override       public boolean onCreateOptionsMenu(Menu menu) {           getMenuInflater().inflate(R.menu.main, menu);           return true;       }          public List<Map<String, Object>> getData(){           List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();           for (int i = 0; i < 10; i++) {               Map<String, Object> map=new HashMap<String, Object>();               map.put("image", R.drawable.ic_launcher);               map.put("title""这是一个标题"+i);                list.add(map);           }           return list;       }   }   结语

到此,我们的listview就算是做好了。

转载请注明原文地址: https://www.6miu.com/read-46736.html

最新回复(0)