onItemClickListener将无法使用复选框

时间:2017-09-14 18:34:18

标签: android listview checkbox onitemclicklistener

我有一个带有自定义适配器的ListView。 ListView将包含一个复选框列表,每次单击一个复选框时,我想在自定义视图中添加/删除复选框,因此我认为实现此目的的最佳方法是使用onItemClickListener。

问题是这不起作用,onItemClickListener中的代码永远不会运行。我发现很多关于同样问题的问题,但是对他们起作用的解决方案并不适用于我。

这是我的代码:

MultichoiceAnswerView.java

private void init(Context context) {
    multichoiceAdapter = new MultichoiceAdapter(context, alternatives);

    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    layoutInflater.inflate(R.layout.view_answer_multichoice, this);

    listAlternatives = (ListView) this.findViewById(R.id.list_alternatives);
    listAlternatives.setAdapter(multichoiceAdapter);
    // This is where I tried to add a onItemClickListener, with no success. 

    super.init();
}

MultichoiceAdapter.java

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    String alternative = getItem(position);

    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_multichoice, parent, false);
    }

    CheckBox checkBoxAlternative = (CheckBox) convertView.findViewById(R.id.checkBox_alternative);
    checkBoxAlternative.setText(alternative);

    return convertView;
}

view_answer_multichoice.xml

<ListView
        android:id="@+id/list_alternatives"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:divider="@null"
        android:dividerHeight="0dp" />

item_multichoice.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center">

    <android.support.v7.widget.AppCompatCheckBox
        android:id="@+id/checkBox_alternative"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:text="Answer"/>
</LinearLayout>

可以在此GitHub仓库(分支“卡片”)中访问该项目:https://github.com/WeeRox/yaffect-android

我尝试过的解决方案: 在复选框上设置focusable="false"。 在复选框上设置focusableInTouchMode="false"(包含和不包含focusable="false") 将descendantFocusability="blocksDescendants"设置为LinearLayout 在适配器中设置checkBoxAlternative.setFocusable(false);(虽然没有尝试其他的东西)

上述解决方案均无效。 我确实通过在复选框上设置clickable="false"找到一种(显而易见的)方法来解决这个问题,但是如果我可以让它工作而无需以编程方式检查框,那就太棒了。

也许有一个我没有想过的干净的解决方法(也许我可以使用RecyclerView或类似的东西)。 那么,我该如何解决这个问题呢? 为什么上述解决方案对我不起作用?

0 个答案:

没有答案