在我的应用程序中有一个ListFragment,其中列表中的每个项目都包含一个复选框。每当用户点击其中一个复选框时,应用程序就会启动一个ActionMode上下文菜单。
但我希望应用程序在单击另一个组件时关闭ActionMode菜单。
我试了Fragment#closeContextMenu()
没有成功。
任何想法我怎样才能做到这一点?
答案 0 :(得分:84)
每当您创建/启动ActionMode Create by
时mMode = startActionMode(....);
要关闭它,请使用以下语法
if (mMode != null)
{
mMode.finish();
}
答案 1 :(得分:1)
Kotlin代码
在按下菜单项后使用 ActionMode.Callback 完成ActionMode
private val actionModeCallbacks = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
mode.menuInflater.inflate(R.menu.menu_action_mode, menu)
return true
}
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_item -> {
mode.finish() // after click of menu item close action mode
return true
}
}
return false
}
override fun onDestroyActionMode(mode: ActionMode) {
}
}
<强> startSupportActionMode 强>
(activity as AppCompatActivity).startSupportActionMode(actionModeCallbacks)
答案 2 :(得分:1)
export const hardshipTestData =
{
scenarios:
{
Wrongusername: { username: 'abc', password: 'ab', loggedIn: false },
Wrongpassword: { username: 'xyz', password: 'ab', loggedIn: false},
blankCreds: { username: '', password: '', loggedIn: false },
CorrectCreds: { username: 'username12', password: 'password12', loggedIn: true }
}, }
从actionmode调用finish方法时...会破坏action模式。
it("TC", () => {
browser.get("url link");
browser.element(by.id("UserID")).sendKeys(alldata.username);
browser.element(by.id("Password")).sendKeys(alldata.password);
browser.element(by.className("k-button")).click();
expect(isLoggedIn()).toBe(alldata.loggedIn);
})
从回调事件中调用和destroy方法