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:
parent
61a336642a
commit
919994e0ab
2 changed files with 43 additions and 19 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
private void updateOptionsMenu() {
|
||||
if (bookmarkMenuItem != null) {
|
||||
if (isBookmarked) {
|
||||
item.setTitle(R.string.remove_bookmark);
|
||||
item.setIcon(R.drawable.ic_action_important);
|
||||
bookmarkMenuItem.setTitle(R.string.remove_bookmark);
|
||||
bookmarkMenuItem.setIcon(R.drawable.ic_action_important);
|
||||
} else {
|
||||
item.setTitle(R.string.add_bookmark);
|
||||
item.setIcon(R.drawable.ic_action_not_important);
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue