Android(安卓)listview里面包含checkbox
16lz
2021-01-25
如果一个listview中包涵checkbox,比如购物车。要是去点击每个商品前面的checkbox的话比较难以点击,有时候设置成点击item就相当于点击了checkbox.
代码如下
public class MainActivity extends Activity {List 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();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 isSelected;private LayoutInflater mInflater;private Context mContext;public ListViewAdapter(Context ctx) {this.mContext = ctx;this.mInflater = LayoutInflater.from(ctx);isSelected = new ArrayList();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)查看官网的说明:
View | getChildAt(int index) Returns the view at the specified position in the group. |
看的不是明白:对应我的layout的话,checkbox是0,image是1,textview 是2.
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 【原创】android中实现底部tabhost
- div+css命名规范 嫁接android xml命名
- android-电话拨号器&点击事件四种写法
- Android开发应用异步检查更新代码
- Andoroid学习笔记05——Activity布局管理
- 开发问题及解决 java.lang.ClassCastException:android.widget.L
- Android(安卓)Brightness Changing
- ScrollView包含其他可scroll的view时保持滑到最顶端