安卓ListView一个简单代码的注释和探讨

最后更新于:2022-04-01 14:42:54

我是安卓的初学者,最近在学习ListView的内容,LiatView以垂直方式显示各个列表项,而他的列表项由Adapter提供。Adapter常用的是4种,下面是我比较喜欢用的BaseAdapter,感觉BaseAdapter的拓展性非常高。下面贴上一个我的代码以及写写我对这段代码的理解,作为这两天的学习笔记吧。 首先是两个xml ~~~ <?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="match_parent" android:orientation="vertical"> <ListView android:id="@+id/myView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ~~~ ~~~ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/filePic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/fileName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello" android:layout_toRightOf="@id/filePic" /> </RelativeLayout> ~~~ 上面第一个xml只是定义了一个ListView,第二个xml定义了每个列表项的显示内容。 下面是我的java代码 ~~~ public class MainActivity extends Activity { public ListView myList ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myList = (ListView)findViewById(R.id.myView); //自定义的一个Adapter,继承BaseAdapter MyAdapter adapter = new MyAdapter(this); //设置Adapter myList.setAdapter(adapter); } public class MyAdapter extends BaseAdapter { private Context mContext; public MyAdapter (Context context) { this.mContext=context; } //该方法返回值控制该ListView包括多少个列表项 @Override public int getCount() { return 15; } //返回值决定列表项的内容 @Override public Object getItem(int position) { return null; } //返回值决定第position处的列表项的id @Override public long getItemId(int position) { return position; } //返回值决定第position处的列表组件 @Override public View getView(int position, View convertView, ViewGroup parent) { //自定义的一个类,存储每个列表项的内容 ViewHolder holder; //如果传进来的组件为空 if (convertView == null) { //创建一个holder holder = new ViewHolder(); //获取xml组件的内容 convertView = LayoutInflater.from(mContext).inflate( R.layout.file_item,null); //把获取的组件赋给holder holder.myImage = (ImageView)convertView.findViewById(R.id.filePic); holder.myText = (TextView)convertView.findViewById(R.id.fileName); //把holder和convertView关联 convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } return convertView; } }; //自定义的静态类,里面的内容为每个列表项包括的内容 public final class ViewHolder { ImageView myImage; TextView myText; } } ~~~ 写的比较挫,只能算是基本了解了BaseAdapter的运作过程,但是还有很多东西未能清楚,下面一些比较重要的点 1)BaseAdapter里面的button 2)BaseAdapter里面的checkBox 3)明白BaseAdapter的内存管理以及优化 下一步我会重点了解这三个问题。下一篇日志将会对部分问题进行解释
';