Android ViewPager,从 fragment 切换到另一个 fragment

标签 android android-fragments android-viewpager

我有一个有 2 页的 viewpager,在每个 fragment 上我都放了一个按钮来切换 fragment , 但如果我改变方向切换不起作用。 对于切换 fragment ,我使用我的 OnChangePageButtonClick 接口(interface) 为什么会这样?

ViewPager Activity :

public class ViewPagerMusic extends FragmentActivity implements OnChangePageButtonClick {

    private ViewPager vp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager_music);

        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(super.getSupportFragmentManager(), fragments);

        vp = (ViewPager)findViewById(R.id.viewpager);
        vp.setAdapter(viewPagerAdapter);
    }

    private class ViewPagerAdapter extends FragmentStatePagerAdapter {

        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
    public Fragment getItem(int position) {
        switch(position) {
            case 0:
                MainPage mainPage = new MainPage();
                mainPage.setOnChengeButtonListener(ViewPagerMusic.this);
                return mainPage;
            case 1:
                PlaylistPage playlistPage = new PlaylistPage();
                playlistPage.setOnChengeButtonListener(ViewPagerMusic.this);
                return playlistPage;
        }
        return null;
    }

        @Override
        public int getCount() {
            return 2;
        }

    }

    @Override
    public void selectPage(int page) {
        vp.setCurrentItem(page);        
    }

}

我的 Frgamnets:

public class MainPage extends Fragment {

    public MainPage() {
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.music_main_page, container, false);
        ImageButton btnPlaylist = (ImageButton)v.findViewById(R.id.btnGoPlaylist2);
        btnPlaylist.setOnClickListener(onButtonListener);
        return v;
    }

    private OnClickListener onButtonListener = new OnClickListener() {

        @Override
        public void onClick(View view) {
            onChangePageButtonClick.selectPage(1);
        }

    };

    public void setOnBackButtonListener(OnChangePageButtonClick onChangePageButtonClick) {
        this.onChangePageButtonClick = onChangePageButtonClick;
    }

    private OnChangePageButtonClick onChangePageButtonClick;

}

Playlist fragment 类似于 MainPage fragment 。

最佳答案

您的 fragment 正在存储对 ViewPagerMusic Activity 的引用。然而,在旋转之后, Activity 被销毁并重新创建,因此 fragment 现在包含对旧 Activity 的引用。

您可以像这样从 fragment 中调用 Activity 的方法,而不是存储对 Activity 的引用:

((ViewPagerMusic) getActivity()).selectPage(1);

关于Android ViewPager,从 fragment 切换到另一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12882138/

相关文章:

android - 如何在 Jetpack Compose 中使用图像占位符进行预览

Android jetpack 导航组件来自对话框

android - 如何创建在用户向上滚动时覆盖全部 Activity 的底页效果

android - GMail 中的 ListView 行标记

android - 将值传递给 fragment

android - 如何更改PagerTabStrip的字体

java - andengine 塔防游戏 - 敌人<-武器交互

android - Android Studio 3.6.3错误:脱机模式没有com.android.tools.build:gradle:3.6.3的缓存版本。 Gradle 版本:5.6.4

android - 从附加的 RecyclerView.Adapter 调用 Fragment 方法

java - Android 获取固定选项卡、PageViewer 来加载不同的 fragment