2017-04-19 2 views
1

Ich habe ein Fragment, das Liste mit Hilfe von adapter.in Liste gibt es einen Link klicken, in dem Benutzer ruft eine andere Aktivität, die einen Adapter ruft, um Daten zu bekommen. Nach Erhalt von Daten können wir Fügen Sie ata hinzu und speichern Sie in diesem Adapter, der Benutzer zu Fragment 1 führt, um Daten zu speichern.Menü zeigen/verbergen basierend auf Bedingung für Fragment

.Ich möchte nicht Menü als speichern in fragment1. Sobald der Benutzer Daten in onclick der Liste hinzufügen ehich öffnet eine andere Liste, um Daten hinzuzufügen und kehrt zu fragment1 dann muss ich Menü speichern speichern ..... Ich habe versucht .

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 


@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.action_save, menu); 
    shareItem = menu.findItem(R.id.action_save1); 
    shareItem.setVisible(false); 

} 


later based on condition i am doing shareItem.setVisible(true); 
+0

Und was hast du? – Wizard

+0

führt diese anotherList einen Wert zu Ihrem Fragment1 zurück? – CodeCameo

+0

Ja, es gibt Objekt – sanjana

Antwort

0

In Ihrem Fragment überschreiben die onPrepareOptionsMenu() und blenden Sie die Artikel auf der Grundlage Ihrer Bedingung

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    MenuItem item=menu.findItem(R.id.action_save1); 
    item.setVisible(false); 
    super.onPrepareOptionsMenu(menu); 
} 

auch Sie setHasOptionsMenu(true); in onCreate() stellen Sie sicher, rufen

Von Documentation

boolean onPrepareOptionsMenu (Menu menu) vorbereiten der Bildschirm Standard- Optionsmenü angezeigt werden. Dies wird direkt vor dem Anzeigen des Menüs angezeigt, jedes Mal wenn es angezeigt wird. Sie können diese Methode verwenden, um die Elemente aktiv zu aktivieren/deaktivieren oder den Inhalt anderweitig dynamisch zu ändern.

0

hinzufügen boolean Variable als Feld in Aktivität isShareItemVisible = true, dann, wenn die Bedingungen geändert, es zu false und invalidateOptionsMenu(); nennen eingestellt sind. Im onCreateOptionsMenu Methode verwenden diese Variable, das heißt:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.action_save, menu); 
    shareItem = menu.findItem(R.id.action_save1); 
    shareItem.setVisible(isShareItemVisible); 
} 
0

bevor Sie eine weitere Liste Öffnen Sie einen Booleschen Wert auf true gesetzt und wenn Sie auf die fragment1 bekommen wieder setUserVisibleHint() Methode wird aufgerufen, und Sie können diesen Booleschen Wert überprüfen und isVisibleToUser variabler Wert. Wenn beide wahr sind, können Sie den Menüpunkt sehen.

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
} 

Oder Wenn Sie eine andere Aktivität öffnen Daten bekommen können Sie startActivityForResult() Methode verwenden. Wenn Sie die Daten an Activity zurücksenden. Es wird onActivityResult() aufgerufen werden. Von wo Sie die requestCode und alle Ihre Fragmente startActivityForResult() Methode überprüfen können. Von wo aus können Sie den Menüpunkt einstellen.

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 1001) { 
      Fragment fragment1 = (Fragment) getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG); 
      if (fragment1 != null) { 
       fragment1 .onActivityResult(requestCode, resultCode, data); 
      } 
     } 
    } 
+0

Ich starte Aktivität mit Startaktivität für reult, ich sage wie myitem.setvisiblity (true); aber nicht funktioniert. – sanjana

+0

setzen Sie Sichtbarkeit von 'onActivityResult()' Methode? – CodeCameo

+0

ja if (nestedhashmap.linkgarmentdata! = Null) { shareItem.setVisible (true); – sanjana

0

Wenn Sie eine weitere Aktivität für das Ergebnis starten, können Sie startActivityForResult() verwenden. Nachdem Sie die Daten erhalten haben, können Sie das Menü aktivieren. Hier finden Sie weitere Informationen How to manage startActivityForResult on Android?

Ein Beispiel erhalten, wenn Sie Aktivität stellen Sie den Ergebniscode zum Beispiel 1. Dann, nachdem die Aktivitätsdaten bekommen, beenden Sie die zweite Aktivität wie auf diese Weise

Intent returnIntent = new Intent(); 
setResult(Activity.RESULT_OK,returnIntent); 
finish(); 

beginnen und In Ihrem onActivityResult können Sie prüfen, ob das Ergebnis in Ordnung ist und dann Ihr Menü aktivieren.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1) { 
      if(resultCode == Activity.RESULT_OK){ 
       //data is updated. 
      myitem.setvisiblity(true) 
      }   
     } 
    } 
+0

Ich verwende diese Methode nur für Aktivitätsergebnis Ich überprüfe wie ID-Daten hinzugefügt! = 0 bedeutet dann setvisibity (true); aber nicht funktioniert – sanjana

+0

@sanjan bitte überprüfen Sie die aktualisierte Antwort. – androidcodehunter