android - 如何在自定义 ListView 中查找其他(复选框) View

标签 android listview checkbox listener

我是新来的,所以我可能无法很好地解释情况。如果您需要更多信息,请告诉我。

我正在尝试实现这样的 ListView :

 [textview][button][checkbox] 
 [textview][button][checkbox]
 [textview][button][checkbox] 
 [textview][button][checkbox] 

我希望当我点击其中一个时自动取消选中其他复选框。所以它就像一个单一的选择。我编写了以下可以实现多项选择的代码,但是当我尝试将其切换为单项选择时,我遇到了麻烦。

在 checkBoxOnClickListener 中我找不到其他(复选框) View 并切换它们。有什么建议的 friend 吗?如果您认为我的表达能力很差,请告诉我。

谢谢。

    public class MyAdapter extends SimpleAdapter {

    Map<Integer, Boolean> map;

    LayoutInflater mInflater;

    private List<? extends Map<String, ?>> mList;

    public MyAdapter(Context context, List<Map<String, String>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        map = new HashMap<Integer, Boolean>();
        mInflater = LayoutInflater.from(context);
        mList = data;
        for (int i = 0; i < data.size(); i++) {
            map.put(i, false);
        }
        if (data.get(0).get("value").equals("Male") || data.get(0).get("value").equals("Yes")) {
            map.put(1, true);
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.rapid_diagnosis_row, null);
        }
        TextView textView = (TextView) convertView.findViewById(R.id.multiple_question);
        textView.setText((String) mList.get(position).get("value"));

        CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.multiple_checkbox);
        checkBox.setChecked(map.get(position));

        // save position and checking status into tag
        checkBox.setTag(position);
        checkBox.setOnClickListener(checkBoxOnClickListener);

        return convertView;
    }

    public OnClickListener checkBoxOnClickListener = new OnClickListener() {
        public void onClick(View v) {
            // ((CheckBox) v).toggle();
            boolean checked = ((CheckBox) v).isChecked();
            if (checked) {
                ((CheckBox) v).setChecked(true);
            } else {
                ((CheckBox) v).setChecked(false);
            }
            int p = (Integer) (v.getTag());
            mSimpleAdapter.map.put(p, checked);

                            // this cannot works, helppp
            ListView lv = ((ListView) (v.getParent().getParent()));
            (CheckBox) cb = lv.findViewWithTag(1);
            cb.toggle();
                   .....................

...................... } };

最佳答案

问题是 findViewWithTag(1) 返回 null 吗?可能是 findViewWithTag() 没有递归搜索您的标签。如果您两次访问父级,您将进入 ListView,然后 findViewWithTag() 将查看要标记的布局对象。

您应该浏览每个 ListView 的子项,然后找到每个子项包含的复选框。很难从这里的代码 fragment 中分辨出来,但为什么要使用运行时设置标签来尝试查找复选框而不是 ID?

关于android - 如何在自定义 ListView 中查找其他(复选框) View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215771/

相关文章:

android - SwipeRefreshLayout 选项卡布局。 webview无法向上滚动

android - 如何更改android studio中的文件层次结构?

java - fragment 无法在旋转时恢复正确的 View

checkbox - Angular2,如果没有选中复选框则禁用按钮

java - 使用这种方式将上下文传递给非上下文类是否安全

android:state_activated 未找到

android - 单击后如何在 ListView 中显示项目

php - 获取最后选中的复选框

javascript - 如何确保在允许提交我的表单之前勾选我的确认复选框

具有可见性的 android 布局 GONE