gpt4 book ai didi

android - onItemCheckedStateChanged() 在自定义 ExpandableListView 上只调用一次

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:14 25 4
gpt4 key购买 nike

我正在尝试在我的自定义 ExpandableListView 中实现多项选择,这里是 Java 代码和组布局:

Java

mExpandable.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE_MODAL);
mExpandable.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode actionMode, int position, long id, boolean checked) {
if(DEBUG) Log.i("mFragmentList","onItemCheckedStateChanged()");

if(mExpandable.getCheckedItemCount() == 0)
actionMode.setSubtitle("Check some items!");
else if(mExpandable.getCheckedItemCount() == 1)
actionMode.setSubtitle("1 item selected");
else
actionMode.setSubtitle(mExpandable.getCheckedItemCount() + " items selected");
}

@Override
public boolean onCreateActionMode(ActionMode actionMode, android.view.Menu menu) {
actionMode.setTitle("Select Items");
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode actionMode, android.view.Menu menu) {
return true;
}

@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return true;
}

@Override
public void onDestroyActionMode(ActionMode actionMode) {

}
});

group_row.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/activated">

<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:scaleType="center"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:layout_gravity="left"
android:src="@drawable/ball" />

<TextView
android:id="@+id/tvGroupName"
android:paddingLeft="35dp"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFF0000"
android:textSize="17sp" />

</RelativeLayout>

当我长按一个项目时,该项目被选中并创建 ActionMode 但如果我想选择另一个项目,该项目会展开并且 onItemCheckedStateChanged() 不会不再打电话,所以我不能选择超过一项。我试图将 CHOICE_MODE_MULTIPLE_MODAL 放入 XML,但我什至无法选择一项。我错过了什么?这是一个屏幕截图:

enter image description here

最佳答案

好吧,我终于通过变通办法解决了这个问题。

mExpandable.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
if(actionModeEnabled)
expandableListView.setItemChecked(i, !expandableListView.isItemChecked(i));

return actionModeEnabled;
}
});

mExpandable.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode actionMode, int position, long id, boolean checked) {
if(mExpandable.getCheckedItemCount() == 1)
actionMode.setSubtitle("1 item selected");
else
actionMode.setSubtitle(mExpandable.getCheckedItemCount() + " items selected");
}

@Override
public boolean onCreateActionMode(ActionMode actionMode, android.view.Menu menu) {
actionModeEnabled = true;
actionMode.setTitle("Select Items");
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode actionMode, android.view.Menu menu) {
return true;
}

@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return true;
}

@Override
public void onDestroyActionMode(ActionMode actionMode) {
actionModeEnabled = false;
}
});

因此,当我长按某些项目时,将启用操作模式并按预期检查第一个项目。为了继续选择项目,我设置了一个 OnGroupClickListener,所以现在当我点击一个项目时,我使用 setItemChecked() 选择/取消选择它并返回 true当启用操作模式时,列表不会展开,只是被选中。

关于android - onItemCheckedStateChanged() 在自定义 ExpandableListView 上只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21344605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com