2016-07-14 5 views
0

У меня есть два фрагмента, один из которых - это фрагмент фрагмента, а другой - один раз, и я использую его как диалог один раз и как фрагмент моей проблемы здесь с меню опций, в фрагменте списка есть меню товаров, которое отображается как действие всегда и в диалог фрагмент я не хочу этот пункт, чтобы быть видимым и я не хочу, меню опций, чтобы быть видимым тоже, я попыталсяМеню опций в DialogFragment

setHasOptionMenu(false) 

, но он не работал и пытался setHasOptionMenu(true) и очистить все элементы в меню, но это не сработало.

Кроме того, у моей родительской деятельности нет кода для меню опций. вот мой код:

@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

необходимый код здесь –

+0

я узнал, что мне нужно только время для фрагмента диалога, чтобы знать, что меню опций больше не существует, поэтому мне пришлось отправить задержку с помощью обработчика, прежде чем я запустил фрагмент –

ответ

-1

я обнаружил, что диалог фрагмент нужно только время, чтобы знать, что опция меню не существует больше, так что я должен был отправить задержку с помощью обработчика, прежде чем я начала фрагмента

+0

Вы не должны использовать какой-либо задержанный код таким образом, как вы не можете предсказать, что он будет работать для каждого типа устройства. – Chucky

0

вы можете попытаться установить родительский фрагмент как: fragment.setTargetFragment (. GetSupportFragmentManager() findFragmentById (R.id.frame), 1);

и в фрагменте ребенка, который вы выполняете (в методах onAttach/onDetach) getTargetFragment(). SetMenuVisibility (true);

+0

это не сработало, но спасибо за ваши усилия :) –

0

Возможно, попробуйте использовать одну из тем диалога, когда вы вызываете этот фрагмент как диалог. Для этого вы можете использовать этот конструктор:

AlertDialog.Builder (контекст Контекст, внутр темы)

т.е.

AlertDialog.Builder строитель = новый AlertDialog.Builder (getActivity(), тема)

Дополнительная информация: Theme not applying to DialogFragment on Android

+0

it didn ' t, но спасибо за ваши усилия :) –