У меня есть меню с 4 пунктами меню, и при нажатии одного из них я хочу переместить его наверх (MenuItem.SHOW_AS_ACTION_ALWAYS)
, а предыдущий выбранный должен опускаться вниз (MenuItem.SHOW_AS_ACTION_NEVER
). Мне удалось добавить выбранный элемент наверх, но я не не знаю, как переместить предыдущий выбранный вниз.
Моя идея состояла в том, чтобы получить все остальные и установить их как MenuItem.SHOW_AS_ACTION_NEVER
. Я попытался выбрать один такой
val javaItem = findViewById<MenuItem>(R.id.javaMenuItem)
но он говорит, что ожидает просмотра
Это мое меню
<?xml version = "1.0" encoding = "utf-8"?>
<menu xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:android = "http://schemas.android.com/apk/res/android">
<item
android:id = "@+id/javaMenuItem"
android:title = "@string/javaItem" />
<item
android:id = "@+id/pythonMenuItem"
android:title = "@string/pythonItem" />
<item
android:id = "@+id/rubyMenuItem"
android:title = "@string/rubyItem" />
<item
android:id = "@+id/javaScriptItem"
android:title = "@string/javaScriptItem" />
</menu>
Это то, что я сделал
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val notSelectedTextView = findViewById<TextView>(R.id.middleTextMessageTextView);
notSelectedTextView.visibility = View.GONE
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
when (item.itemId) {
R.id.javaMenuItem -> {
getDataFromApi("Java")
setListView();
}
R.id.pythonMenuItem -> {
getDataFromApi("Python")
setListView();
}
R.id.rubyMenuItem -> {
getDataFromApi("Ruby")
setListView();
}
R.id.javaScriptItem -> {
getDataFromApi("JavaScript")
setListView();
}
}
return super.onOptionsItemSelected(item)
}
Вы можете сохранить меню в локальном поле, и для каждого вызова onOptionsItemSelected()
вы можете перебирать все пункты меню и устанавливать для них MenuItem.SHOW_AS_ACTION_NEVER
Предполагая, что меню называется R.menu.my_menu
, сохраните меню в локальной переменной:
var mMenu: Menu? = null
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.my_menu, menu)
mMenu = menu
return true
}
Затем выполните итерацию по элементам меню, чтобы установить их действие на SHOW_AS_ACTION_NEVER
, прежде чем устанавливать щелкнутый элемент на SHOW_AS_ACTION_ALWAYS
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val notSelectedTextView = findViewById<TextView>(R.id.middleTextMessageTextView);
notSelectedTextView.visibility = View.GONE
// iterate over menu items
for (i in 0 until mMenu?.size()!!) {
val menuItem: MenuItem = mMenu!!.getItem(i)
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER)
}
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
when (item.itemId) {
R.id.javaMenuItem -> {
getDataFromApi("Java")
setListView();
}
R.id.pythonMenuItem -> {
getDataFromApi("Python")
setListView();
}
R.id.rubyMenuItem -> {
getDataFromApi("Ruby")
setListView();
}
R.id.javaScriptItem -> {
getDataFromApi("JavaScript")
setListView();
}
}
return super.onOptionsItemSelected(item)
}