Actionbar-Elemente duplizieren
Habe ich Aktionsleiste in meiner Anwendung. Ich bin das hinzufügen von action-items mit menu.xml. Ich bin mit action-bar-compat wie meine Bibliothek unterstützt. Ich beobachtete ein sonderbares Problem wo meine Aktionspunkte sind immer dupliziert.
Ich bin auf der Suche nach diesem Problem zufällig beim verlassen mein Gerät im Leerlauf oder mit anderen Anwendungen arbeiten. Finden Sie die screen-shot meiner folgenden code:
private LoginWebActivity mContext;
private final String TAG = "LoginFragment";
//for metrics
private String mPageNameSignIn = "signin";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.webview, container, false);
return mView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mContext = (LoginWebActivity) getActivity();
initFragment();
}
@Override
public void onResume() {
super.onResume();
}
/**
* Initialises the views and variables of the fragment.
*/
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
protected void initFragment() {
mWebView = (WebView) mView.findViewById(R.id.webView);
Bundle b = mContext.getIntent().getExtras();
if (b != null) {
mUrl = b.getString(Constants.EXTRA_WEB_LOGIN_URL);
}
super.initFragment();
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.signin, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Navigate
switch (item.getItemId()) {
case R.id.menu_item_signup:
mContext.onSignUpClick();
break;
case android.R.id.home:
if (!goBack())
getActivity().finish();
default:
break;
}
return super.onOptionsItemSelected(item);
}
Mein XML :
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="@+id/menu_item_signup"
allergy:showAsAction="ifRoom"
android:title="@string/sign_up">
</item>
- Fügen Sie Ihrem Menü-option aus dem fragment, richtig? Erstellen Sie mehrere Fragmente?
- Ich habe eine Tätigkeit, die im Grunde zeigt die web-Ansicht, wenn der Benutzer tippt auf die Schaltfläche "anmelden". Ich bin grundsätzlich Ersatz der bestehenden fragment mit einem anderen fragment.
- So ist es möglich, dass jedes fragment fügt eine action bar option? Können Sie verschieben Sie diese option, um die Aktivität?
- Dies ist, was mein problem gelöst: stackoverflow.com/a/16582895/565433
InformationsquelleAutor Ganesh | 2013-11-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie löschen Sie Ihre Menü-Objekt, bevor Sie das hinzufügen von Elementen. Ich hatte das gleiche problem und das war die beste Lösung, die ich gefunden habe.
Ziemlich spät zu dieser party, aber auch für jedermann, der kommt, über dies über das Google-wie ich es Tat, hier ist das eigentliche problem.
Du nicht posten Sie Ihre Tätigkeit code ist das erstellen des Fragments, aber ich wage zu erraten, dass es wie folgt aussieht:
Das problem mit diesem ist, dass, wenn die Aktivität geht über Ihren gesamten Lebenszyklus (was passieren würde, "wenn mein Gerät im Leerlauf oder mit anderen Anwendungen arbeiten", wie du sagst), das system speichern und wiederherstellen den Zustand der Fragmente, die für Sie. Aber mit diesem code, Sie auch hinzufügen, ein neues fragment zu Ihrer Tätigkeit, so dass Sie am Ende mit mehreren Fragmenten laufen in Ihrer Tätigkeit, indem jede ein Element auf dem Menü.
Während die geposteten workaround-Adresse wird die doppelte Menüeinträge Problem, es würde lassen Sie diese extra-fragment-Instanzen rumliegen, das ist natürlich nicht das, was Sie wollen.
Der richtige fix ist eine einfache null-check:
Da zeigt das system die Tätigkeit hergestellt wird, mit einem nicht-null-Bundle für die parameter savedInstanceState, prüfen Sie diese, um zu bestimmen, ob Sie sollten erstellen und hinzufügen einer neuen fragment.
Hoffe, das hilft.
if (savedInstanceState == null) { /* add fragment */ }
und nicht die andere Weise herum?ich verwendet Renan Bandeira die große Lösung, und ich hatte einige Fehler, so dass ich ihn ein bisschen verändert und für mich funktionierte auch . dann bin ich meine Erfahrungen : vielleicht ist es hilfreich, wieder alle Kredit geht an ihn für die große Lösung .
return true
für eine void-Methode?Ich vor dem gleichen problem und genau so, wie Staat durch @Szymon "ich hinzufügen-Menü-option aus dem fragment, erstelle ich mehrere Fragmente?" Also meine Lösung war wie folgt Aussehen.
onCreate :
onPrepare :
menu.clear();
!! perfektSollten Sie die folgende Methode verwenden, statt, und Sie werden nicht sehen, die Duplikate mehr (beachten Sie, dass es nur ein Menü-Objekt als argument)