2016-07-14 11 views
0

Ich habe zwei Fragmente, das eine ist ein Fragment und das andere benutze ich als Dialog und als Fragment mein Problem hier mit Optionsmenü, im Listenfragment gibt es ein Item Menü gegeben zeigen immer Aktion und in Dialog Fragment ich will nicht dieses Element sichtbar sein, und ich Optionsmenü nicht sichtbar sein wollen, ich versucht habe zuOptionsmenü in DialogFragment

setHasOptionMenu(false) 

aber es hat nicht funktioniert und versuchte zu setHasOptionMenu(true) und alle Artikel löschen im Menü, aber es hat auch nicht funktioniert.

Auch meine Elternaktivität hat keinen Code für das Optionsmenü. hier ist mein Code:

@SuppressLint("InflateParams") 
public class FormGeneratorActivity extends DialogFragment { 
Control mControl; 
boolean doChangeTitle; 
private boolean isDialog; 
public static int CreatedNum = 0; 


public static FormGeneratorActivity getInstance(Control mControl, boolean doChangeTitle) { 
    FormGeneratorActivity frag = new FormGeneratorActivity(); 
    Bundle b = new Bundle(); 
    b.putParcelable("control", mControl); 
    b.putBoolean("changeTitle", doChangeTitle); 
    frag.setArguments(b); 
    return frag; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     doChangeTitle = getArguments().getBoolean("changeTitle"); 
    } 
    setHasOptionsMenu(false); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    menu.clear(); 
    activity.invalidateOptionsMenu(); 
    super.onPrepareOptionsMenu(menu); 

} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
} 



public void setDoChangeTitle(boolean doChangeTitle) { 
    this.doChangeTitle = doChangeTitle; 
} 

View view; 
boolean isInflated = false; 
ParentActivity activity; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (view == null) { 
     mControl = getArguments().getParcelable("control"); 
     view = inflater.inflate(R.layout.form_generator_fragment, container, false); 
     container = (LinearLayout) view.findViewById(R.id.cont); 
     isInflated = true; 
    } else { 
     if (view.getParent() != null) 
      ((ViewGroup) view.getParent()).removeAllViews(); 
     isInflated = false; 
    } 

    return view; 
} 

String headerPageTitle = null; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    activity = (ParentActivity) getActivity(); 
    activity.getSupportActionBar().invalidateOptionsMenu(); 

     CreatedNum++; 

} 

@Override 
public void onResume() { 
    super.onResume(); 
    activity.setPageTitle(headerPageTitle); 
    setHasOptionsMenu(false); 
    activity.getSupportActionBar().invalidateOptionsMenu(); 

} 


public void isDialog(boolean b) { 
    isDialog = b; 
} 

}

+0

-Code hier –

+0

erforderlich Start habe ich herausgefunden dass ich nur Zeit für das Dialogfragment brauche, um zu wissen, dass das Optionsmenü nicht mehr existiert, also musste ich Verzögerung mit dem Handler posten, bevor ich das Fragment starte –

Antwort

-1

ich fand heraus, dass Dialog Fragment Zeit wissen muss nur, dass das Optionsmenü nicht mehr existiert, so hatte ich Verzögerung unter Verwendung von Handler zu schreiben, bevor ich das Fragment

+0

Du solltest keinen zeitverzögerten Code verwenden, da du nicht vorhersagen kannst, dass er für jeden Gerätetyp funktioniert. – Chucky

0

können Sie versuchen, Elternfragment wie zu setzen: fragment.setTargetFragment (. GetSupportFragmentManager() findFragmentById (R.id.frame), 1);

und im untergeordneten Fragment, das Sie ausführen (in onAttach/onDetach-Methoden) getTargetFragment(). SetMenuVisibility (true);

+0

es hat nicht funktioniert, aber danke für Ihre Mühe :) –

0

Vielleicht versuchen Sie eines der Dialogthemen zu verwenden, wenn Sie dieses Fragment als Dialog aufrufen. Um dies zu tun Sie diesen Konstruktor verwenden:

AlertDialog.Builder (Context Kontext, int Thema)

dh

AlertDialog.Builder builder = new AlertDialog.Builder (getActivity(), Thema)

Einige weitere Erklärung: Theme not applying to DialogFragment on Android

+0

it didn ' t Arbeit aber danke für deine Mühe :) –