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.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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue