Android开发ListView之BaseAdapter

本文介绍了一种使用自定义BaseAdapter实现ListView展示的方法。通过创建一个名为MyBaseAdapter的类继承自BaseAdapter,并重写了关键的getView方法来填充ListView项。文章详细展示了如何通过LayoutInflater加载布局,以及如何从数据源中获取数据并将其设置到TextView组件中。

今天正好又写了一个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;
		
	}
	

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值