1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Fragments option menus: keep a reference to MenuItems to change their

state directly instead of recreating the whole menu (works fine with
ActionBarCompat)
This commit is contained in:
Christophe Beyls 2014-01-19 01:17:37 +01:00
parent 61a336642a
commit 919994e0ab
2 changed files with 43 additions and 19 deletions

View file

@ -6,7 +6,6 @@ import android.database.Cursor;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.ListFragment; import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
@ -37,6 +36,9 @@ public class BookmarksListFragment extends ListFragment implements LoaderCallbac
private EventsAdapter adapter; private EventsAdapter adapter;
private boolean upcomingOnly; private boolean upcomingOnly;
private MenuItem filterMenuItem;
private MenuItem upcomingOnlyMenuItem;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -66,8 +68,23 @@ public class BookmarksListFragment extends ListFragment implements LoaderCallbac
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.bookmarks, menu); inflater.inflate(R.menu.bookmarks, menu);
menu.findItem(R.id.filter).setIcon(upcomingOnly ? R.drawable.ic_action_filter_selected : R.drawable.ic_action_filter); filterMenuItem = menu.findItem(R.id.filter);
menu.findItem(R.id.upcoming_only).setChecked(upcomingOnly); upcomingOnlyMenuItem = menu.findItem(R.id.upcoming_only);
updateOptionsMenu();
}
private void updateOptionsMenu() {
if (filterMenuItem != null) {
filterMenuItem.setIcon(upcomingOnly ? R.drawable.ic_action_filter_selected : R.drawable.ic_action_filter);
upcomingOnlyMenuItem.setChecked(upcomingOnly);
}
}
@Override
public void onDestroyOptionsMenu() {
super.onDestroyOptionsMenu();
filterMenuItem = null;
upcomingOnlyMenuItem = null;
} }
@Override @Override
@ -75,9 +92,8 @@ public class BookmarksListFragment extends ListFragment implements LoaderCallbac
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.upcoming_only: case R.id.upcoming_only:
upcomingOnly = !upcomingOnly; upcomingOnly = !upcomingOnly;
FragmentActivity activity = getActivity(); updateOptionsMenu();
activity.supportInvalidateOptionsMenu(); getActivity().getPreferences(Context.MODE_PRIVATE).edit().putBoolean(PREF_UPCOMING_ONLY, upcomingOnly).commit();
activity.getPreferences(Context.MODE_PRIVATE).edit().putBoolean(PREF_UPCOMING_ONLY, upcomingOnly).commit();
getLoaderManager().restartLoader(BOOKMARKS_LOADER_ID, null, this); getLoaderManager().restartLoader(BOOKMARKS_LOADER_ID, null, this);
return true; return true;
} }

View file

@ -69,6 +69,8 @@ public class EventDetailsFragment extends Fragment {
private ViewHolder holder; private ViewHolder holder;
private boolean bookmarksChanged = false; private boolean bookmarksChanged = false;
private MenuItem bookmarkMenuItem;
private final BroadcastReceiver bookmarksReceiver = new BroadcastReceiver() { private final BroadcastReceiver bookmarksReceiver = new BroadcastReceiver() {
@Override @Override
@ -190,21 +192,27 @@ public class EventDetailsFragment extends Fragment {
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.event, menu); inflater.inflate(R.menu.event, menu);
ShareCompat.configureMenuItem(menu, R.id.share, getShareIntentBuilder()); ShareCompat.configureMenuItem(menu, R.id.share, getShareIntentBuilder());
bookmarkMenuItem = menu.findItem(R.id.bookmark);
updateOptionsMenu();
}
MenuItem item = menu.findItem(R.id.bookmark); private void updateOptionsMenu() {
if (bookmarkMenuItem != null) {
if (isBookmarked) { if (isBookmarked) {
item.setTitle(R.string.remove_bookmark); bookmarkMenuItem.setTitle(R.string.remove_bookmark);
item.setIcon(R.drawable.ic_action_important); bookmarkMenuItem.setIcon(R.drawable.ic_action_important);
} else { } else {
item.setTitle(R.string.add_bookmark); bookmarkMenuItem.setTitle(R.string.add_bookmark);
item.setIcon(R.drawable.ic_action_not_important); bookmarkMenuItem.setIcon(R.drawable.ic_action_not_important);
}
} }
} }
private void invalidateOptionsMenu() { @Override
getActivity().supportInvalidateOptionsMenu(); public void onDestroyOptionsMenu() {
super.onDestroyOptionsMenu();
bookmarkMenuItem = null;
} }
@Override @Override
@ -214,12 +222,12 @@ public class EventDetailsFragment extends Fragment {
if (!isBookmarked) { if (!isBookmarked) {
if (DatabaseManager.getInstance().addBookmark(event)) { if (DatabaseManager.getInstance().addBookmark(event)) {
isBookmarked = true; isBookmarked = true;
invalidateOptionsMenu(); updateOptionsMenu();
} }
} else { } else {
if (DatabaseManager.getInstance().removeBookmark(event)) { if (DatabaseManager.getInstance().removeBookmark(event)) {
isBookmarked = false; isBookmarked = false;
invalidateOptionsMenu(); updateOptionsMenu();
} }
} }
break; break;
@ -274,7 +282,7 @@ public class EventDetailsFragment extends Fragment {
boolean result = DatabaseManager.getInstance().isBookmarked(event); boolean result = DatabaseManager.getInstance().isBookmarked(event);
if (result != isBookmarked) { if (result != isBookmarked) {
isBookmarked = result; isBookmarked = result;
invalidateOptionsMenu(); updateOptionsMenu();
} }
bookmarksChanged = false; bookmarksChanged = false;
} }