安卓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的内存管理以及优化
下一步我会重点了解这三个问题。下一篇日志将会对部分问题进行解释