今天正好又写了一个BaseAdapter用于显示自定义信息的适配器。于是打算将ListView关联的适配器做个总结。
BaseAdapter重写
先上效果图:
1, 准备layout
将需要显示在listItem中的内容写成一个layout,我这里需要现实两列文字内容,所以xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/poiinfo_fieldname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="15sp"
android:layout_weight="1.0"/>
<TextView android:id="@+id/poiinfo_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="15sp"
android:layout_weight="1.0"/>
</LinearLayout>
以上内容就是并列显示了两个TextView, 并且通过layout_weight属性设置使得他们各占一半。
2. 准备数据
虽然这个功能主要的工作量就是这块了,但是与这篇文章讲的内容关系不大,最后得到的还是一个List<Map<String, Object>>对象的数据,其中Map<String, Object>就是每一个Item的数据。
3. 实现BaseAdapter
主要是getView(int position, View convertView, ViewGroup parent)函数,获取每一个item对应的数据,放到上述layout的textview中即可。。
直接上代码:
import java.util.List;
import java.util.Map;
import com.walkinfo.walkiofficeandroid.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyBaseAdapter extends BaseAdapter {
final static String STRNAME = "地类";
final static String STRCONTENT = "名称";
public MyBaseAdapter(Context context,List<Map<String, Object>> data) {
// TODO Auto-generated constructor stub
mInflater = LayoutInflater.from(context);
mListData = data;
}
private LayoutInflater mInflater;
List<Map<String, Object>> mListData;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
//获取准备好的layout
convertView = mInflater.inflate(R.layout.list_items_poiinfo, null);
}
TextView tv_field = (TextView) convertView.findViewById(R.id.poiinfo_fieldname);
TextView tv_content = (TextView) convertView.findViewById(R.id.poiinfo_content);
if(position == 0)
{
//标题内容设置
tv_field.setText(STRNAME);
tv_content.setText(STRCONTENT);
}
else
{
tv_field.setText((String)mListData.get(position-1).get("fieldname"));
tv_content.setText((String)mListData.get(position-1).get("content"));
}
return convertView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mListData.size()+1;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return mListData.get(arg0-1);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public boolean isEnabled(int pos)
{
//如果是标题item,则不响应点击事件
return (0 == pos) ? false:true;
}
}