gpt4 book ai didi

java - startActionMode 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:08 25 4
gpt4 key购买 nike

真的很奇怪。我第一次在 eclipse 中启动应用程序并调用 startActionMode,一切正常。如果我关闭应用程序并再次打开它,startActionMode 将返回 null。在我更改应用程序中的某些内容并从 Eclipse 再次运行它之前,它将始终返回 null。在文档中,它说如果 startActionMode 被取消,它会返回 null,但它没有解释它被取消的原因。

有什么想法吗?顺便说一句,我正在使用 actionbarsherlock

更新:如果我关闭手机或关闭应用程序并再次启动应用程序,它可以正常工作...但是当我关闭它并再次打开它时,它会执行相同的操作。

这是我的代码:ActionModeCallback 类:

   class ActionModeCallback implements ActionMode.Callback{

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.contextactiondownloads, menu);
return true;
}

@Override
public void onDestroyActionMode(ActionMode mode) {

}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub

return false;
}
};

在我的主要 Activity 中:

public ActionMode startActionMode()
{
mActionMode = startActionMode(new ActionModeCallback());
return mActionMode;
}

在我的 ListView 适配器中:

 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

MainActivity activity = (MainActivity)rowView.getContext();
if (isChecked) {

if(actionmode == null){
actionmode = activity.startActionMode();
}else
{
actionmode.invalidate();
}
}
else {
activity.finishActionMode();
actionmode=null;
}
}
});

最佳答案

嗯,我真的不明白你为什么会这样。但我创建了一个 ListView,其行为与旧 Gmail 的 ListView 曾经具有的行为相同。

基本上,用户可以通过长按其中一个项目来启动“选择模式”,然后用户可以通过长按或单击项目左侧来选择其他项目。该复选框由您的适配器管理,方法是使其在“选择模式”中可见,而在不处于“选择模式”时不可见。您还可以通过检查当前项目是否被选中来对其进行检查。然后,将其设置为不可点击,以便 ListView 可以获取触摸事件。

如果你想让ListView以“选择模式”启动,你可以将selectableFromTheBeginning设置为true。然后,您从一开始就使 CheckBox 可见。稍后我会使其更易于使用和记录,但我认为它现在可用。

这是 SelectionListView 的链接:

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SelectionListView.java

您还需要复制我的 attrs.xml 中指定要通过 XML 设置的 SelectionListView 属性的部分。

https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/res/values/attrs.xml

要使用它,您需要实现 SelectionListView.SelecionActionModeCallback 而不是 ActionMode.ActionModeCallback。记得调用父类的方法。

您可以在 XML 中使用它并通过 ID 找到它。因此,您可以更改用户选择项目时显示的消息:

listView.setSelectedStringFormat("%d selected items");

您可以使用方法 setActionModeCallback 设置 SelectionListView.SelecionActionModeCallback 的实现。

在你的适配器中,你可以做这样的事情:

checkBox.setChecked(listView.isItemChecked(position));

在您的 ActionModeCallback 中,您可以实现如下内容:

public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
SparseBooleanArray checkedItems = listView.getCheckedItemPositions();

List<Item> selectedItems = new ArrayList<Item>();

for (int i = 0; i < checkedItems.size(); i++) {
if (checkedItems.valueAt(i)) {
selectedItems.add(yourListOfItems.get(checkedItems.keyAt(i)));
}
}

switch(item.getId()){
case R.id.do_something:
doSomething(selectedItems);
mode.finish();
break;
}
}

您的复选框看起来像这样:

<CheckBox
android:id="@+id/select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false" />

有了这个小部件,您不必太担心 ActionMode 或选择项目的方式。我很抱歉缺少文档。这是我将一些代码用于其他项目的存储库。我打算把它记录下来。您可以查看其他小部件。

如果您使用它,请尊重 Apache 许可证。

关于java - startActionMode 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17625066/

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