Как открыть новый фрагмент из другого фрагмента?
Я попытался сделать навигацию между фрагментами. У меня есть NewFragment.java
с новым рабочим фрагментом. Моя проблема:
Как мне сделать это onClickListener
запустить NewFragment.java
правильно?
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), NewFragment.class);
startActivity(i);
}
});
К вашему сведению: это внутри фрагмента (я не знаю, имеет ли это значение).
Ответы
Ответ 1
Добавьте следующий код в функцию прослушивания кликов,
NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.Layout_container, nextFrag, "findThisFragment")
.addToBackStack(null)
.commit();
Строка "findThisFragment"
может использоваться, чтобы найти фрагмент позже, если вам нужно.
Ответ 2
Это более известный код кода @Narendra,
Сначала вам нужен экземпляр второго фрагмента. Затем у вас должны быть объекты FragmentManager и FragmentTransaction. Полный код приведен ниже:
Fragment2 fragment2=new Fragment2();
FragmentManager fragmentManager=getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main,fragment2,"tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Надеюсь, что это сработает. Иногда вы можете получить getSupportFragmentManager() вместо getFragmentManager().
Ответ 3
Вы должны создать функцию внутри действия, чтобы открыть новый фрагмент и передать ссылку на активность к фрагменту, и для некоторого события внутри фрагмента вызвать эту функцию.
Ответ 4
@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
super.onListItemClick(l, v, pos, id);
UserResult nextFrag= new UserResult();
this.getFragmentManager().beginTransaction()
.replace(R.id.content_frame, nextFrag, null)
.addToBackStack(null)
.commit();
}
Ответ 5
Использовать этот,
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
Ответ 6
Fragment fr = new Fragment_class();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.add(R.id.viewpagerId, fr);
fragmentTransaction.commit();
Чтобы быть точным, R.id.viewpagerId
создается в вашем текущем макете класса, при вызове новый фрагмент автоматически проникает.
Ответ 7
Добавление к решению @Narendra...
ВАЖНО: При работе с фрагментами навигация тесно связана с активностью хоста, поэтому вы не можете просто переходить от фрагмента к фрагменту без реализации этого класса фрагмента в хосте Activity.
Образец:
public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {
Также проверьте, что у вашего хоста есть следующая функция переопределения:
@Override public void onFragmentInteraction(Uri uri) {}
Надеюсь, это поможет...