Как заменить фрагмент на нажатие кнопки этого фрагмента?
У меня есть действие, содержащее несколько фрагментов. Деятельность изначально имеют фрагмент и в нем есть две кнопки. При нажатии на эту кнопку я должен заменить фрагмент на новый фрагмент. Каждый фрагмент имеет различные виджеты и заменяет текущий фрагмент как различные события.
Это моя проблема. Как я могу достичь этого?
предложить мне идеи.
5 ответов
вы можете заменить фрагмент на FragmentTransaction.
Вот, держи.
сделать интерфейс.
public interface FragmentChangeListener
{
public void replaceFragment(Fragment fragment);
}
реализует вашу активность удержания фрагмента с помощью этого интерфейса.
public class HomeScreen extends FragmentActivity implements
FragmentChangeListener {
@Override
public void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();;
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainerId, fragment, fragment.toString());
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.commit();
}
}
вызовите этот метод из таких фрагментов.
/ / в вашем фрагменте.
public void showOtherFragment()
{
Fragment fr=new NewDisplayingFragment();
FragmentChangeListener fc=(FragmentChangeListener)getActivity();
fc.replaceFragment(fr);
}
надеюсь, это сработает!
Примечание: mContainerId-это идентификатор вида, который удерживает фрагменты внутри. Вы должны переопределить Метод onstring () фрагмента также.
Ну даже я изучаю android..
недавно я решил ту же проблему "Как изменить фрагмент на событии нажатия кнопки"
`buttonNAme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1,new Homefragment());
fragmentTransaction.commit();
}
});`
здесь "frame1" - это идентификатор" FRAMELAYOUT", который определен в XML моего DrawerLayer.
поэтому теперь, когда я хочу фрагмент транзакции, я использую этот код.Каждый раз он будет заменять frame1, созданный из вашего последнего фрагмента.
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1,new newfragment());
fragmentTransaction.commit()
Надеюсь, Это Поможет..
- определите интерфейс и назовите его IChangeListener (или что-то в этом роде) и определите метод, внутри которого будет выполняться работа (например,
changeFragment()
) (или вызовите другой метод, который будет выполнять работу) для изменения фрагмента). - Сделайте свою деятельность реализовать интерфейс, или сделать анонимный класс в рамках деятельности реализовать его.
- создайте парамеризованный конструктор вашего фрагмента, который принимает параметр IChangeListener.
- при инициализации фрагмент, передайте свою реализацию IChangeListener (анонимный класс или действие, реализующее его)
- сделайте прослушиватель onClick кнопки вызовом метода изменения IChangeListener.
из будущего 2017 и после этого существуют различные библиотеки, которые запускают событий используя автобус и теперь вы можете использовать его, чтобы сообщить действие, когда событие является триггером во фрагменте, которым оно владеет.
см.:
вы можете проверить новые архитектуры, предложенные Google
Не используйте подход в принятом ответе, получите действительно уродливый с более чем 3 различными событиями из фрагментов
вы можете использовать следующее для замены фрагмента при нажатии кнопки этого фрагмента:
getFragmentManager().beginTransaction().replace(R.id.main_content, new insertFragmentNameHere()).addToBackStack(null).commit();