android ListView GridView 单选和复选列子

1.看到论坛有 同学不会写 listview item 的单选和 复选 所以写了一个发出来 单选类(SignChooseActivity)

package com.zhx.listdemo;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;public class SignChooseActivity extends Activity {    private ListView mListView;    private TextAdapter mAdapter;    private List mList = new ArrayList();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_sign);        mListView = (ListView) findViewById(R.id.text_listview);        for (int i = 0; i < 20; i++) {            mList.add("去约车" + i);        }        mAdapter = new TextAdapter(mList, this);        mListView.setAdapter(mAdapter);    }}

2.单选适配器

package com.zhx.listdemo;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;public class TextAdapter extends BaseAdapter {    private List list;    private Activity activity;    private Map isSelectedMap = new HashMap();    public TextAdapter(List list, Activity activity) {        super();        this.list = list;        this.activity = activity;        for (int i = 0; i < list.size(); i++) {            isSelectedMap.put(i + "", false);        }    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return list == null ? 0 : list.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        ViewHolder holder = null;        if (convertView == null) {            holder = new ViewHolder();            convertView = activity.getLayoutInflater().inflate(                    R.layout.test_item, null);            holder.tv = (TextView) convertView.findViewById(R.id.test_tv);            holder.box = (ImageView) convertView                    .findViewById(R.id.test_check_box);            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        convertView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                for (int i = 0; i < list.size(); i++) {                    if (i == position) {                        Log.i("点击项目", position + "");                        isSelectedMap.put(i + "", true);                    } else {                        Log.i("未点击项目", position + "");                        isSelectedMap.put(i + "", false);                    }                }                notifyDataSetChanged();            }        });        Log.i("选中项", position + "@" + isSelectedMap.get(position + "") + "");        if (isSelectedMap.get(position + "")) {            holder.box.setImageResource(R.drawable.multi_select_flag);        } else {            holder.box.setImageResource(R.drawable.ic_launcher);        }        holder.tv.setText(list.get(position));        return convertView;    }    class ViewHolder {        TextView tv;        ImageView box;    }}package com.zhx.listdemo;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;public class TextAdapter extends BaseAdapter {    private List list;    private Activity activity;    private Map isSelectedMap = new HashMap();    public TextAdapter(List list, Activity activity) {        super();        this.list = list;        this.activity = activity;        for (int i = 0; i < list.size(); i++) {            isSelectedMap.put(i + "", false);        }    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return list == null ? 0 : list.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        ViewHolder holder = null;        if (convertView == null) {            holder = new ViewHolder();            convertView = activity.getLayoutInflater().inflate(                    R.layout.test_item, null);            holder.tv = (TextView) convertView.findViewById(R.id.test_tv);            holder.box = (ImageView) convertView                    .findViewById(R.id.test_check_box);            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        convertView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                for (int i = 0; i < list.size(); i++) {                    if (i == position) {                        Log.i("点击项目", position + "");                        isSelectedMap.put(i + "", true);                    } else {                        Log.i("未点击项目", position + "");                        isSelectedMap.put(i + "", false);                    }                }                notifyDataSetChanged();            }        });        Log.i("选中项", position + "@" + isSelectedMap.get(position + "") + "");        if (isSelectedMap.get(position + "")) {            holder.box.setImageResource(R.drawable.multi_select_flag);        } else {            holder.box.setImageResource(R.drawable.ic_launcher);        }        holder.tv.setText(list.get(position));        return convertView;    }    class ViewHolder {        TextView tv;        ImageView box;    }}

3.单选用的是listview 复选用gridview 做例子 其实一样的换个名字就好了 (MultChooseActivity)

package com.zhx.listdemo;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.BitmapFactory;import android.os.Bundle;import android.util.TypedValue;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.ImageView;import android.widget.RelativeLayout.LayoutParams;import android.widget.TextView;public class MultChooseActivity extends Activity {    private Button mBack;    private Button mAll;    private GridView mDisplay;    private TextView mCount;    private AlbumAdapter mAdapter;    private List mSelect = new ArrayList();// 存放当前用户选择的图片的编号    private int imagesId[] = { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher,R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher,R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,            R.drawable.ic_launcher, R.drawable.ic_launcher,R.drawable.ic_launcher, R.drawable.ic_launcher };    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.album_activity);        findViewById();        setListener();        init();    }    private void findViewById() {        mBack = (Button) findViewById(R.id.album_back);        mAll = (Button) findViewById(R.id.album_all);        mDisplay = (GridView) findViewById(R.id.album_display);        mCount = (TextView) findViewById(R.id.album_count);    }    private void setListener() {        mBack.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                // 关闭当前界面                finish();            }        });        mAll.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                if (mSelect.size() == imagesId.length) {                    // 全部选中时,点击为反选,所以清空                    mSelect.clear();                } else if (mSelect.size() > 0) {                    // 当已选中时,点击为全选,添加没选择中的                    for (int i = 0; i < imagesId.length; i++) {                        if (mSelect.contains(String.valueOf(i))) {                            continue;                        }                        mSelect.add(String.valueOf(i));                    }                } else {                    // 没选中,点击为全选,添加所有                    for (int i = 0; i < imagesId.length; i++) {                        mSelect.add(String.valueOf(i));                    }                }                // 如果全部选中则显示反选,否则显示全选                if (mSelect.size() == imagesId.length) {                    mAll.setText("反选");                } else {                    mAll.setText("全选");                }                // 更新界面显示数量内容                initCount(mSelect.size());                // 刷新界面                mAdapter.notifyDataSetChanged();            }        });        mDisplay.setOnItemClickListener(new OnItemClickListener() {            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {                // 查看当前点击的条目是否已经选中,选中则移出,没选中则删除                if (mSelect.contains(String.valueOf(arg2))) {                    mSelect.remove(String.valueOf(arg2));                } else {                    mSelect.add(String.valueOf(arg2));                }                // 如果全部选中则显示反选,否则显示全选                if (mSelect.size() == imagesId.length) {                    mAll.setText("反选");                } else {                    mAll.setText("全选");                }                // 更新界面显示数量内容                initCount(mSelect.size());                // 刷新界面                mAdapter.notifyDataSetChanged();            }        });    }    private void init() {        // 更新界面显示数量内容        initCount(mSelect.size());        // 初始化适配器        mAdapter = new AlbumAdapter();        // 添加适配器        mDisplay.setAdapter(mAdapter);    }    /**     * 更新界面显示数量内容     *      * @param count     *            选中的图片数量     */    private void initCount(int count) {        // 更新选择的图片数量,如果数量大于0,设置确定按钮为可用,反之不可用并修改字体颜色        if (count > 0) {            mCount.setText("已选择" + count + "张");            mCount.setTextColor(0xFFFFFFFF);        } else {            mCount.setText("已选择0张");            mCount.setTextColor(0xFF999999);        }    }    private class AlbumAdapter extends BaseAdapter {        public int getCount() {            return imagesId.length;        }        public Object getItem(int position) {            return null;        }        public long getItemId(int position) {            return position;        }        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            if (convertView == null) {                convertView = LayoutInflater.from(MultChooseActivity.this).inflate(R.layout.album_activity_item, null);                holder = new ViewHolder();                holder.photo = (ImageView) convertView.findViewById(R.id.album_item_photo);                holder.select = (ImageView) convertView.findViewById(R.id.album_item_select);                // padding大小为40dip,计算px值                int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, MultChooseActivity.this                        .getResources().getDisplayMetrics());                // 设置显示的图片大小为屏幕宽度1/4大小                LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);                params.width = (480 - padding) / 4;                params.height = (480 - padding) / 4;                holder.photo.setLayoutParams(params);                holder.select.setLayoutParams(params);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            // 添加图片            holder.photo.setImageBitmap(BitmapFactory.decodeResource(getResources(), imagesId[position]));            // 查看是否选中,选中则显示选中效果            if (mSelect.contains(String.valueOf(position))) {                holder.select.setVisibility(View.VISIBLE);            } else {                holder.select.setVisibility(View.GONE);            }            return convertView;        }        class ViewHolder {            ImageView photo;            ImageView select;        }    }}

4 .下载地址https://github.com/zhoulinxue/Listdemo.git

更多相关文章

  1. Android(安卓)实例教程
  2. 简单安卓QQ登录界面
  3. 弹窗样式dialog
  4. Android(安卓)Jetpack
  5. Android快速入门 四大应用组件之一Activity(打电话和发短信)功能练
  6. 使用ImageView 加上 Edittext做出自定义的输入框(EditText美化)
  7. Android开发指南-用户界面-事件处理
  8. Android(安卓)zar高速扫码程序,(比zxing快很多倍),包更小,扫码界面Xml
  9. Android设计登录界面、找回密码、注册功能

随机推荐

  1. iOS、Android、WebOS系统体系架构的比较
  2. Android面试之----Android系统架构图及简
  3. Android之隐式意图(Intent)如何查找匹配
  4. Android上面TreeView效果
  5. Android(安卓)Handler 消息传递机制
  6. Android下的Hook初探
  7. Android(安卓)多线程编程:IntentService &
  8. Android老版本项目导入到新版SDK提示错误
  9. Android(安卓)ANR (转)
  10. Android中弹出对话框的实现