我正在尝试重新创建Google在Gmail应用中使用ListView所做的事情.特别是,我想让每个列表项包括一个CheckBox和两个TextView(一个在另一个之上).检查(或单击)CheckBox时以及单击列表项上的任何其他位置时,我需要侦听器.最后,我希望ActionBar能够反映选择的项目,并提供Select All,Select None等选项(请参阅此屏幕截图).

到目前为止,这是我想出的布局.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<CheckBox android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal" />
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dp"
android:focusable="true"
android:clickable="true" >
<TextView android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp" />
<TextView android:id="@+id/dateTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这会正确显示所有内容,但我需要有关如何为两个视图设置侦听器的指针(@ + id/checkBox和@ + id/linearLayout1).我查看了List16 API演示,但他们使用的是simple_list_item_activated_1布局,我不确定它的XML是什么样的.正如他们的代码建议的那样,我创建了一个实现ListView.MultiChoiceModeListener的ModeCallback类,并将ListView的选择模式设置为CHOICE_MODE_MULTIPLE_MODAL,但我不知道如何在我的布局中使用CheckBox来处理它.
有没有人成功复制了Gmail应用的ListView行为?我已经搜索了很多但无法想出任何东西(尽管其他几个人提出了类似的问题,比如这个问题- 大多数答案只是回到同样的API演示).
另外,对于上下文,我将SQLite数据库中的数据加载到列表中,并且我已经创建了自己的Cursor适配器(工作正常).我有一种感觉,我需要在newView()和bindView()方法中在这个类中设置监听器,但我尝试过的一切都没有用.
有任何想法吗?
我有一个EditText,我希望用户能够选择一些文本并对所选文本应用一些基本格式(粗体,斜体等).不过,我仍然希望显示标准的复制,剪切,粘贴选项.我在Android文档中的某处读到要执行此操作,您应该在EditText上调用setCustomSelectionActionModeCallback()并将其传递给ActionModeCallback(),这就是我所做的.这是我的代码:
在我的活动的onCreate()方法中:
myEditText.setCustomSelectionActionModeCallback(new TextSelectionActionMode());
Run Code Online (Sandbox Code Playgroud)
回调声明:
private class TextSelectionActionMode implements ActionMode.Callback {
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
menu.add("Bold");
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我点击溢出按钮(访问我的"Bold"菜单项)时,ActionMode会立即关闭.如果我将其设置为始终显示为操作,请使用以下命令:
MenuItem bold = menu.add("Bold");
bold.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
Run Code Online (Sandbox Code Playgroud)
它工作正常,我可以点击它(虽然它显然什么也没做).我在这里错过了什么?
编辑:只是想添加我遇到完全相同的问题,如果我实际上膨胀菜单而不是以编程方式添加菜单项.但是,如果我强迫它始终显示为动作,问题就会消失.