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

View file

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