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

我是安卓的初学者,最近在学习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的内存管理以及优化

下一步我会重点了解这三个问题。下一篇日志将会对部分问题进行解释

文章导航