Вопрос

Я попробовал сделать навигацию между фрагментами.у меня есть NewFragment.java с новым работающим фрагментом.Моя проблема:

Как мне это сделать onClickListener бегать NewFragment.java правильно?

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

    }
});

К вашему сведению:Это изнутри фрагмента (не знаю, имеет ли это значение).

Это было полезно?

Решение

Добавьте следующий код в функцию прослушивания кликов:

NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
             .replace(R.id.Layout_container, nextFrag, "findThisFragment")
             .addToBackStack(null)
             .commit();

Строка "findThisFragment" при необходимости можно использовать для поиска фрагмента позже.

Другие советы

Это более описанный код кода @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().

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

@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();  
}

Использовать это,

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();

Чтобы быть точным, R.id.viewpagerId создается в вашем текущем макете класса, при вызове новый фрагмент автоматически проникает.

Добавление к решению @Narendra...

ВАЖНЫЙ:При работе с фрагментами навигация тесно связана с активностью хоста, поэтому вы не можете просто переходить от фрагмента к фрагменту без реализации этого класса фрагмента в активности хоста.

Образец:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

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

@Override public void onFragmentInteraction(Uri uri) {} Надеюсь это поможет...

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

.remove(CourseListFragment.this)

CourseListFragment — это файл класса для фрагмента, который я пытался закрыть.(MainActivity.java, но для конкретного раздела (фрагмент ящика навигации), если это имеет больше смысла для вас), так что мой код выглядит так сейчас:

LecturesFragment nextFrag= new LecturesFragment();

                    getActivity().getSupportFragmentManager().beginTransaction()
                            .remove(CourseListFragment.this)
                            .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                            .addToBackStack(null)
                            .commit();

И это работает как шарм для меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top