Как заменить фрагмент на нажатие кнопки этого фрагмента?

У меня есть действие, содержащее несколько фрагментов. Деятельность изначально имеют фрагмент и в нем есть две кнопки. При нажатии на эту кнопку я должен заменить фрагмент на новый фрагмент. Каждый фрагмент имеет различные виджеты и заменяет текущий фрагмент как различные события.

Это моя проблема. Как я могу достичь этого?

предложить мне идеи.

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()

Надеюсь, Это Поможет..


  1. определите интерфейс и назовите его IChangeListener (или что-то в этом роде) и определите метод, внутри которого будет выполняться работа (например,changeFragment()) (или вызовите другой метод, который будет выполнять работу) для изменения фрагмента).
  2. Сделайте свою деятельность реализовать интерфейс, или сделать анонимный класс в рамках деятельности реализовать его.
  3. создайте парамеризованный конструктор вашего фрагмента, который принимает параметр IChangeListener.
  4. при инициализации фрагмент, передайте свою реализацию IChangeListener (анонимный класс или действие, реализующее его)
  5. сделайте прослушиватель onClick кнопки вызовом метода изменения IChangeListener.

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

см.:

RxBus с RxJava

вы можете проверить новые архитектуры, предложенные Google

ViewModel

Не используйте подход в принятом ответе, получите действительно уродливый с более чем 3 различными событиями из фрагментов


вы можете использовать следующее для замены фрагмента при нажатии кнопки этого фрагмента:

getFragmentManager().beginTransaction().replace(R.id.main_content, new insertFragmentNameHere()).addToBackStack(null).commit();