Android listview里面包含checkbox

来源:互联网 发布:男士护肤品推荐 知乎 编辑:程序博客网 时间:2024/06/05 10:51

如果一个listview中包涵checkbox,比如购物车。要是去点击每个商品前面的checkbox的话比较难以点击,有时候设置成点击item就相当于点击了checkbox.

代码如下

public class MainActivity extends Activity {List<String> beanList;private ListViewAdapter adapter;private ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView) findViewById(R.id.lv);beanList = new ArrayList<String>();for (int i = 0; i < 10; i++) {beanList.add("text" + i);}adapter = new ListViewAdapter(this);lv.setAdapter(adapter);lv.setOnItemClickListener(new OnItemClickListener() {/** *  arg0 可以理解为整个listiew 布局 *  arg1 当前点击项 布局 *  arg2 position *  arg3 id */@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stubRelativeLayout view1 = (RelativeLayout) arg1;CheckBox cb = (CheckBox) view1.getChildAt(0);    TextView tv= (TextView) view1.getChildAt(2);Toast t= new Toast(MainActivity.this);Toast.makeText(getApplicationContext(), tv.getText(),     Toast.LENGTH_SHORT).show();cb.setChecked(!cb.isChecked());adapter.isSelected.set(arg2, cb.isChecked());}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}private final class ListViewHolder {public CheckBox check_goods;public ImageView imageViewIcon;public TextView title;public RelativeLayout groubuyitem;}private class ListViewAdapter extends BaseAdapter {// 用来控制CheckBox的选中状况public ArrayList<Boolean> isSelected;private LayoutInflater mInflater;private Context mContext;public ListViewAdapter(Context ctx) {this.mContext = ctx;this.mInflater = LayoutInflater.from(ctx);isSelected = new ArrayList<Boolean>();initDate();}// 初始化isSelected的数据private void initDate() {for (int i = 0; i < beanList.size(); i++) {isSelected.add(i, false);}}@Overridepublic int getCount() {// TODO Auto-generated method stubif (beanList == null) {return 0;}return beanList.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn beanList.get(arg0);}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(final int position, View convertView, ViewGroup arg2) {ListViewHolder viewHolder;if (convertView == null) {viewHolder = new ListViewHolder();convertView = mInflater.inflate(R.layout.item_groupbuy_shopcart, null);viewHolder.check_goods = (CheckBox) convertView.findViewById(R.id.check_goods);viewHolder.imageViewIcon = (ImageView) convertView.findViewById(R.id.img);viewHolder.title = (TextView) convertView.findViewById(R.id.title);viewHolder.groubuyitem = (RelativeLayout) convertView.findViewById(R.id.groubuyitem);convertView.setTag(viewHolder);} else {viewHolder = (ListViewHolder) convertView.getTag();}final int p = position;//viewHolder.groubuyitem//.setOnClickListener(new View.OnClickListener() {//@Override//public void onClick(View v) {////RelativeLayout view1 = (RelativeLayout) v;//CheckBox cb = (CheckBox) view1.getChildAt(0);//cb.setChecked(!cb.isChecked());//isSelected.set(p, cb.isChecked());////}//});viewHolder.title.setText(beanList.get(position));// 根据isSelected来设置checkbox的选中状况viewHolder.check_goods.setChecked(isSelected.get(position));viewHolder.check_goods.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubCheckBox cb = (CheckBox) v;isSelected.set(p, cb.isChecked());}});return convertView;}}}

主要代码在于onItemClick里面。

/**

            *  arg0 可以理解为整个listiew 布局

             *  arg1 当前点击项 布局

             *  arg2 position

             *  arg3 id

             */

 

关于getChildAt(0)查看官网的说明:

ViewgetChildAt(int index)
Returns the view at the specified position in the group.

看的不是明白:对应我的layout的话,checkbox是0,image是1,textview 是2.


0 0
原创粉丝点击