addison_lin 发表于 2012-1-10 09:55:33

android中实现带图片和checkbox的listview

android:layout_weight="1"这一句可以使中间的textview权重增大,从而后面的checkbok可以居右显示。
android:focusable="false"
      android:focusableInTouchMode="false"
      android:clickable="false"
这三句很重要,如果不加就会出现错误。
由于checkbox的点击事件优先级比listview的高,所以要在checkbox中添加android:focusable="false",使得checkbox初始的时候没有获取焦点。
接下来在main.xml中添加Listview组件
[代码] MyAdapter.javapackage com.zwq.umeng;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private List<Map<String, Object>> mData;
    public static Map<Integer, Boolean> isSelected;
    public MyAdapter(Context context) {
      mInflater = LayoutInflater.from(context);
      init();
    }
    //初始化
    private void init() {
      mData=new ArrayList<Map<String, Object>>();
      for (int i = 0; i < 5; i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("img", R.drawable.icon);
            map.put("title", "第" + (i + 1) + "行的标题");
            mData.add(map);
      }
      //这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。
      isSelected = new HashMap<Integer, Boolean>();
      for (int i = 0; i < mData.size(); i++) {
            isSelected.put(i, false);
      }
    }
    @Override
    public int getCount() {
      return mData.size();
    }
    @Override
    public Object getItem(int position) {
      return null;
    }
    @Override
    public long getItemId(int position) {
      return 0;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder = null;
      //convertView为null的时候初始化convertView。
      if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.vlist, null);
            holder.img = (ImageView) convertView.findViewById(R.id.img);
            holder.title = (TextView) convertView.findViewById(R.id.title);
            holder.cBox = (CheckBox) convertView.findViewById(R.id.cb);
            convertView.setTag(holder);
      } else {
            holder = (ViewHolder) convertView.getTag();
      }
      holder.img.setBackgroundResource((Integer) mData.get(position).get(
                "img"));
      holder.title.setText(mData.get(position).get("title").toString());
      holder.cBox.setChecked(isSelected.get(position));
      return convertView;
    }
    public final class ViewHolder {
      public ImageView img;
      public TextView title;
      public CheckBox cBox;
    }
}
页: [1]
查看完整版本: android中实现带图片和checkbox的listview