【问题标题】:onChildClick does not work for my ExpandableListViewonChildClick 不适用于我的 ExpandableListView
【发布时间】:2016-03-09 14:48:42
【问题描述】:

我无法知道为什么我的 onChildClickExpandableListView 不起作用的原因。 但是 onGroupClick 可以正常工作。

这就是我所拥有的

fileExpandableList.setOnGroupClickListener(this);
            fileExpandableList
                .setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView parent,
                        View v, int groupPosition, int childPosition,
                        long id) {
                    System.out.println("Child CLICKED.");
                    return false;
                }

            });

我见过很多人遇到这个问题,但没有人给出确凿的答案。

添加:

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

列表视图 xml:

...
        <ExpandableListView
        android:id="@android:id/list"
        android:drawSelectorOnTop="false"
        android:groupIndicator="@drawable/group_indicator"
        style="@style/allWrapper" >
    </ExpandableListView>
</FrameLayout>

子行 xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/expandablelist_childrow"
style="@style/allmenu" >

<com.abc.xyz.android.view.TypeModuleView
    android:id="@+id/expandablelist_childview"
    android:longClickable="true"
    android:onClick="myOnClick"
    style="@style/module" >
</com.abc.xyz.android.view.TypeModuleView>

myOnClick 事件处理程序

    public void myOnClick(View view) {
    TypeModule clickedModule = ((TypeModuleView) view).onClick();
    if (clickedModule != null) { // In landscape layout
        moduleContentFragment.setModuleParent(clickedModule);
        moduleContentFragment.changePath("/");
        // Added for module highlighting
        expandableListFragment.setChildrenBackground(view);

    }
}

【问题讨论】:

  • 你尝试从onChildClick返回true吗?
  • 我又添加了一些东西...请检查...是 android:onClick 可能会造成问题的东西吗???如果是,那么它可能是什么......
  • 通过摆脱 LongClickable 和 OnClick,它会起作用。最好使用 onChildClick,如果你想要 longClick 然后使用 onItemLongClick。

标签: android events expandablelistview


【解决方案1】:

尽量把isChildSelectable()的返回值设为True

【讨论】:

    【解决方案2】:

    onClick 属性(为什么还要放它?)和 onChildClickListener 之间存在冲突。

    onClick 捕获 TypeModuleView 上的点击事件。 LinearLayout 没有收到,child 没有被点击。

    【讨论】:

    • 我是新手。现在处理旧代码。在我看来,如果我想摆脱这个 onClick,我将不得不做很多事情。无论如何要将事件传递给LinearLayout??
    • 您可以发布您的 myOnClick 吗?那里可以做一些事情
    • 是的,它现在就在那里...至少我想在那里有 groupId 和 childId...这样我就可以做我的事情...无论如何要从 View 中获取它?
    • 你可以做的(不是很干净或可维护,但仍然)是在 myOnClick() 中调用 ((View) getParent()).performClick()
    • 通过摆脱 LongClickable 和 OnClick,它起作用了。最好使用 onChildClick,如果你想要 longClick 然后使用 onItemLongClick。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多