刚刚说学习了 ICS 操作栏。我正在与 Action Bar Sherlock 合作,以便向后兼容我想做的事情,并且已经浏览了它的示例中的许多源代码。
我有 3 个图像视图,我想设置一个长按所有 3 个的侦听器。当用户长按一个时,我将在操作栏上显示一个 ActionMode,让他们拍照。由于操作栏似乎就像菜单一样工作,我怎么知道 ImageView 在他们单击按钮后触发了我的 ActionMode ?
现在没有完成很多代码,因为我刚刚开始研究它,这是我想做的第一件事。
刚刚说学习了 ICS 操作栏。我正在与 Action Bar Sherlock 合作,以便向后兼容我想做的事情,并且已经浏览了它的示例中的许多源代码。
我有 3 个图像视图,我想设置一个长按所有 3 个的侦听器。当用户长按一个时,我将在操作栏上显示一个 ActionMode,让他们拍照。由于操作栏似乎就像菜单一样工作,我怎么知道 ImageView 在他们单击按钮后触发了我的 ActionMode ?
现在没有完成很多代码,因为我刚刚开始研究它,这是我想做的第一件事。
要启动一个动作模式,您需要提供一个ActionMode.Callback
类的实例。对于这样的事情,你应该在这个类中创建一个构造函数,它接受一些关于图像视图的相关信息。
public static class ImageActionMode extends ActionMode.Callback {
private final int viewId;
public ImageActionMode(View view) {
viewId = view.getId();
}
public boolean onActionItemClicked (ActionMode mode, MenuItem item) {
//Do something with viewId as the target
}
//Other callbacks
}
您还可以保留对完整ImageView
或任何其他您需要响应选项项的引用。
现在,当您启动动作模式时,您将执行以下操作:
public void onLongPress(View view, /*whatever else...*/) {
startActionMode(new ImageActionMode(view));
}
在花了一些时间之后,我已经实现了它并成功地工作。在下面的链接中,我给出了正确的代码和解释。