Android-ListView
ListView低配版
首先通过一个简化版的ListView来了解一下ListView的使用大体步骤
一. 编写activity_list_view.xml 代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" tools:context =".ListViewActivity" > <ListView android:id ="@+id/lv" android:layout_width ="match_parent" android:layout_height ="wrap_content" > </ListView > </LinearLayout >
二. 编写单个的item的布局文件item_listview.xml,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?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 ="wrap_content" > <ImageView android:id ="@+id/iv_pic" android:src ="@drawable/smile" android:layout_width ="50dp" android:layout_height ="50dp" /> <TextView android:gravity ="center_vertical" android:id ="@+id/tv_name" android:text ="名字" android:layout_width ="match_parent" android:layout_height ="50dp" /> </LinearLayout >
三. 自定义一个适配器,继承自BaseAdapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 public class MyAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private Context context; public MyAdapter (Context context) { this .context=context; layoutInflater=LayoutInflater.from(context); } @Override public int getCount () { return 15 ; } @Override public Object getItem (int i) { return null ; } @Override public long getItemId (int i) { return 0 ; } private class ViewHolder { public TextView textView; public ImageView imageView; } @Override public View getView (int i, View view, ViewGroup viewGroup) { ViewHolder holder=null ; if (holder==null ) { view=layoutInflater.inflate(R.layout.item_listview,null ); holder=new ViewHolder(); holder.textView=view.findViewById(R.id.tv_name); holder.imageView=view.findViewById(R.id.iv_pic); view.setTag(holder); }else { holder= (ViewHolder) view.getTag(); } holder.textView.setText("name" ); holder.imageView.setImageResource(R.drawable.smile); return view; } }
四. 在MainActivity.java中使用适配器
1 2 3 4 5 6 7 8 9 10 11 public class ListViewActivity extends AppCompatActivity { private ListView listView; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); listView = findViewById(R.id.lv); listView.setAdapter(new MyAdapter(this )); } }
ListView中配版
很显然,我们使用ListView肯定不可能仅仅只是用来做这样固定的静态页面,所以我们当我们需要做一个动态的,可以从外部改变的ListView时,就需要用一下的方法了。
一. 编写activity_list_view.xml 代码和上面一样 二. 编写单个的item的布局文件item_listview.xml,代码和上面一样 三. 定义一个JavaBean,实现数据的改变
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class Bean { private String name; private int id; public Bean (String name, int id) { this .name = name; this .id = id; } public int getId () { return id; } public String getName () { return name; } public void setId (int id) { this .id = id; } public void setName (String name) { this .name = name; } }
四. 自定义一个适配器,继承自BaseAdapter,代码稍有改动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 public class ComplexMyAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private Context context; private List<Bean> mDatas; public ComplexMyAdapter (Context context,List mDatas) { this .context=context; this .mDatas = mDatas; layoutInflater=LayoutInflater.from(context); } @Override public int getCount () { return mDatas.size(); } @Override public Object getItem (int i) { return mDatas.get(i); } @Override public long getItemId (int i) { return i; } @Override public View getView (int i, View view, ViewGroup viewGroup) { ComplexMyAdapter.ViewHolder holder = null ; if (holder == null ) { view = layoutInflater.inflate(R.layout.item_listview, null ); holder = new ComplexMyAdapter.ViewHolder(); holder.tvName = view.findViewById(R.id.tv_name); holder.ivPic = view.findViewById(R.id.iv_pic); view.setTag(holder); } else { holder = (ComplexMyAdapter.ViewHolder) view.getTag(); } Bean b = mDatas.get(i); holder.tvName.setText(b.getName()); holder.ivPic.setImageResource(b.getId()); return view; } private class ViewHolder { ImageView ivPic; TextView tvName; } }
五. 在MainActivity.java中使用适配器,此时需要初始化数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class ListViewActivity extends AppCompatActivity { private ListView listView; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); listView = findViewById(R.id.lv); listView.setAdapter(new MyAdapter(this )); initData(); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick (AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(ListViewActivity.this ,"点击了" +i,Toast.LENGTH_SHORT).show(); } }); } private void initData () { List<Bean> mDatas = new ArrayList<>(); Bean b = new Bean("list0" ,R.drawable.smile); mDatas.add(b); for (int i=1 ;i<18 ;i++){ mDatas.add(new Bean("list" +i,R.drawable.smile)); } ComplexMyAdapter a = new ComplexMyAdapter(this ,mDatas); listView.setAdapter(a); } }
ListView高配版
除了上述以外,还有高配版,就是打造万能适配器,具体有兴趣可自学,暂时不作要求。