Вы захотите выполнить FragmentTransaction
и использовать метод replace()
Это не должно быть слишком сложно, но ответ будет зависеть от того, где находится ваше меню (т.е.onOptionsItemSelected()
перезвоните в вашей родительской Деятельности или во Фрагменте A / B?).
Предположим, для простоты, ваша реализация меню и onOptionsItemSelected()
находятся в родительском действии, и вы хотите изменить форму фрагментов в случае, если выбрано menu_option1.Это выглядело бы примерно так:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
//...
switch (item.getItemId()) {
case R.id.menu_option1:
//do something
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new YourFragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.your_fragment_id, newFragment);
transaction.addToBackStack(null);
transaction.commit();
return true;
case R.id.menu_option2:
//do something else;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
В качестве альтернативы, если ваше меню является дочерним по отношению к одному из ваших фрагментов (что должно быть для более многократно используемого кода), то один из методов - это требовать, чтобыАктивность хоста для реализации интерфейса, определенного фрагментом, который можно использовать в качестве обратного вызова.А в обратном вызове onOptionsItemSelected()
внутри вашего класса фрагмента вы просто вызываете этот метод обратного вызова.
Хотя это звучит как глоток, вам действительно нужно сделать всего пару вещей.Представьте, что это ваш фрагмент-класс
public static class FragmentA extends ListFragment {
OnSelectedListener mListener;
// Container Activity must implement this interface
public interface OnSelectedListener {
public void onSelected();
}
...
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//This is to ensure that the Activity has implemented the interface we set up above
try {
mListener = (OnSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnSelectedListener");
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
//...
switch (item.getItemId()) {
case R.id.menu_option1:
//do something
getActivity().onSelected();
return true;
case R.id.menu_option2:
//do something else;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
...
}
Тогда в Задании вы увидите что-то вроде:
public class MainActivity extends Activity implements FragmentA.onSelectedListener{
...
public void onSelected(){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new YourFragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.your_fragment_id, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}