当 RadioButton 单击 Listview 时 setOnItemClickListener 不起作用

Posted

技术标签:

【中文标题】当 RadioButton 单击 Listview 时 setOnItemClickListener 不起作用【英文标题】:When RadioButton clicked Listview setOnItemClickListener does not work 【发布时间】:2018-04-10 17:39:07 【问题描述】:

当我单击radioButton 时,Listview 的onClickListener 不会响应操作。需要做什么才能采取行动。当我在 Listview 上单击 radioButton 时,我想采取行动。但是其他组件在点击时会被listviewListener 监听。有类似的问题,但我找不到解决此问题的正确答案。

question_item.xml

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:background="@color/white"
        android:orientation="vertical"
        android:padding="@dimen/inner_size">

        <TextView
            android:id="@+id/explanationText"
            style="@style/Font.Medium.18"
            android:layout_
            android:layout_
            android:padding="@dimen/inner_size"
            android:text="explanation"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/questionText"
            style="@style/Font.Medium.18"
            android:layout_
            android:layout_
            android:padding="@dimen/inner_size"
            android:text="question"
            android:textSize="18sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/questionImageView"
            android:layout_
            android:layout_
            android:layout_gravity="center" />

        <RadioGroup
            android:layout_
            android:layout_
            android:focusable="false"
            android:orientation="vertical">

            <RadioButton
                android:id="@+id/answerRadio1"
                style="@style/RadioButton"
                android:layout_
                android:layout_
                android:focusable="false"
                android:descendantFocusability="blocksDescendants"
                android:focusableInTouchMode="true"
                android:padding="3dp"
                android:text="a) choose" />


            <RadioButton
                android:id="@+id/answerRadio2"
                style="@style/RadioButton"
                android:layout_
                android:layout_
                android:focusable="false"
                android:descendantFocusability="blocksDescendants"
                android:focusableInTouchMode="true"
                android:padding="3dp"
                android:text="b) choose" />


            <RadioButton
                android:id="@+id/answerRadio3"
                style="@style/RadioButton"
                android:layout_
                android:layout_
                android:focusable="false"
                android:focusableInTouchMode="true"
                android:padding="3dp"
                android:text="c) choose" />


            <RadioButton
                android:id="@+id/answerRadio4"
                style="@style/RadioButton"
                android:layout_
                android:layout_
                android:focusable="false"
                android:focusableInTouchMode="true"
                android:padding="3dp"
                android:text="d) choose" />

        </RadioGroup>

    </LinearLayout>

它只包含列表视图代码。 activity_question.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <ListView
        android:id="@+id/activityQuestionList"
        android:layout_
        android:layout_
        android:divider="@color/gray"
        android:dividerHeight="@dimen/listview_divider_height" />

</LinearLayout>

java 代码。

activityQuestionList = (ListView) findViewById(R.id.activityQuestionList);
        activityQuestionList.setItemsCanFocus(false);

        questionAdapter = new QuestionAdapter(questions, this);
        activityQuestionList.setAdapter(questionAdapter);


        activityQuestionList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) 
                switch (view.getId()) 
                    case R.id.answerRadio1:
                        answerA(i);
                        Toast.makeText(view.getContext(), "index : " + i, Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.answerRadio2:
                        answerB(i);
                        break;
                    case R.id.answerRadio3:
                        answerC(i);
                        break;
                    case R.id.answerRadio4:
                        answerD(i);
                        break;
                

                Toast.makeText(view.getContext(), "index : " + i, Toast.LENGTH_SHORT).show();
            
        );

【问题讨论】:

问题结构? 我有列表视图。当我点击 textview 组件时,响应 onClickItemListener。但是当我点击单选按钮时,我无法在 onClickItemListener 上收听它。 【参考方案1】:

实现 setOnCheckedChangeListener 方法

private void checkListeners() 
    radioButton1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
            if(isChecked)
                condition1=1;
            else
                condition1=0;
        
    );

    radioButton2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
            if(isChecked)
                condition2=1;
            else condition2=0;
        
    );

【讨论】:

以上是关于当 RadioButton 单击 Listview 时 setOnItemClickListener 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?

ListView 中的 RadioButton 波纹效果

带有 RadioButton 单选的自定义 ListView

WPF c# 界面上有3个radiobutton和3个listview 选择不同的radiobutton出现不同的listview

asp.net(C#)怎样将listview中的radiobutton设置成互斥?

ListView中的RadioButton怎么单选?