ListView中实现互斥按钮(每个Item中有两个button,永远只有一个item中的一个按钮被选中)

这个博客介绍了如何在Android的ListView中实现互斥的按钮功能。每个列表项包含两个按钮,每次只有一个按钮处于选中状态。通过使用HashMap存储每个按钮的状态,并在点击事件中更新状态并通知Adapter刷新视图,确保只有一个item的按钮处于“on”状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class MainAdapter extends BaseAdapter {
	private LayoutInflater inflater;
	//存放两个按钮被选中状态
	private Map<Integer, Boolean> map1;
	private Map<Integer, Boolean> map2;
	private int at = -1;

	public MainAdapter(Context context) {
		inflater = LayoutInflater.from(context);
		map1 = new HashMap<Integer, Boolean>();
		map2 = new HashMap<Integer, Boolean>();
		for (int i = 0; i < 10; i++) {//默认都未被选中
			map1.put(i, false);
			map2.put(i, false);
		}
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 10;
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@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;
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.item, null);
			holder = new ViewHolder();
			holder.btn1 = (Button) convertView.findViewById(R.id.button1);
			holder.btn2 = (Button) convertView.findViewById(R.id.button2);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.btn1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//点击button1,将button1状态变为true,其他都为0
				map1.put(position, true);
				map2.put(position, false);
				if (at != -1 && at != position) {
					map1.put(at, false);
					map2.put(at, false);
				}
				at = position;
				MainAdapter.this.notifyDataSetChanged();
			}
		});
		holder.btn2.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//点击button2,将button2状态变为true,其他都为0
				map1.put(position, false);
				map2.put(position, true);
				if (at != -1 && at != position) {
					map1.put(at, false);
					map2.put(at, false);
				}
				at = position;
				MainAdapter.this.notifyDataSetChanged();
			}
		});
		if (map1.get(position))
			holder.btn1.setText("on");
		else
			holder.btn1.setText("off");

		if (map2.get(position))
			holder.btn2.setText("on");
		else
			holder.btn2.setText("off");
		return convertView;
	}

	class ViewHolder {
		private Button btn1;
		private Button btn2;
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值