У меня есть PopupMenu с 4 вариантами: добавить как друга, как соседа, как напарника и как поклонника. Что я хочу сделать, так это если вы, скажем, нажмете «Добавить в друзья», тогда эта опция изменится на «Удалить друга».
Вот что я пробовал до сих пор:
Мероприятия:
private Menu menuOpts;
public void showPopup(View v) {
Context wrapper = new ContextThemeWrapper(this, R.style.PopupPerfilAjeno);
PopupMenu popup = new PopupMenu(wrapper, v);
popup.setOnMenuItemClickListener(this);
popup.inflate(R.menu.menu);
popup.show();
menuOpts = popup.getMenu();
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_friend:
String add_as_friend = getString(R.string.add_as_friend );
if (item.getTitle().toString().equals(add_as_friend )) {
addContact(1, item);
}
else {
removeContact(1, item);
}
return true;
case R.id.add_workmate:
//
return true;
case R.id.add_neighbour:
//
return true;
case R.id.add_fan:
//
return true;
default:
return false;
}
}
// circle: 1 = friend, 2 = workmate, 3 = neighbour, 4 = fan
private void addContact(final int circle, final MenuItem item) {
switch (circle) {
case 1:
menuOpts.findItem(R.id.add_friend).setTitle(R.string.remove_friend);
// this won't work either:
// item.setTitle(R.string.remove_friend);
break;
case 2:
menuOpts.findItem(R.id.add_workmate).setTitle(R.string.remove_workmate);
break;
case 3:
menuOpts.findItem(R.id.add_neighbour).setTitle(R.string.remove_neighbour);
break;
case 4:
menuOpts.findItem(R.id.add_fan).setTitle(R.string.remove_fan);
break;
}
}
menu.xml:
<?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/add_friend"
android:orderInCategory = "100"
android:title = "@string/add_as_friend"
app:showAsAction = "always" />
<item
android:id = "@+id/add_workmate"
android:orderInCategory = "100"
android:title = "@string/add_as_workmate"
app:showAsAction = "always" />
<item
android:id = "@+id/add_neighbour"
android:orderInCategory = "100"
android:title = "@string/add_as_neighbour"
app:showAsAction = "always" />
<item
android:id = "@+id/add_fan"
android:orderInCategory = "100"
android:title = "@string/add_as_fan"
app:showAsAction = "always" />
</menu>
обратитесь к этому stackoverflow.com/questions/7066657/…
Куда щелкнуть? Это элемент ListView или RecyclerView или простое представление, такое как TextView?




Расширьте другое меню, когда снова отобразите всплывающее окно.
public void showPopup(View v) {
Context wrapper = new ContextThemeWrapper(this, R.style.PopupPerfilAjeno);
PopupMenu popup = new PopupMenu(wrapper, v);
popup.setOnMenuItemClickListener(this);
if (condition) popup.inflate(R.menu.menu);
else popup.inflate(R.menu.menu2);
popup.show();
menuOpts = popup.getMenu();
}
Я нашел решение. Я добавил 4 логических переменных и изменил методы showPopup и addContact следующим образом:
private boolean friend, workmate, neighbour, fan;
public void showPopup(View v) {
Context wrapper = new ContextThemeWrapper(this, R.style.PopupPerfilAjeno);
PopupMenu popup = new PopupMenu(wrapper, v);
popup.setOnMenuItemClickListener(this);
popup.inflate(R.menu.menu);
Menu menuOpts = popup.getMenu();
if (friend) {
menuOpts.getItem(0).setTitle(R.string.remove_friends);
}
if (workmate) {
menuOpts.getItem(1).setTitle(R.string.remove_workamtes);
}
if (neighbour) {
menuOpts.getItem(2).setTitle(R.string.remove_neighbours);
}
if (fan) {
menuOpts.getItem(3).setTitle(R.string.remove_fans);
}
popup.show();
}
private void addContact(final int circle) {
switch (circle) {
case 1:
friend = true;
workmate = false;
neighbour = false;
fan = false;
break;
case 2:
friend = false;
workmate = true;
neighbour = false;
fan = false;
break;
case 3:
friend = false;
workmate = false;
neighbour = true;
fan = false;
break;
case 4:
friend = false;
workmate = false;
neighbour = false;
fan = true;
break;
}
}
добавить все элементы в меню и изменить их видимость в соответствии с вашими потребностями. я не думаю, что ты можешь изменить текст