首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android ViewPager,分片换分片

Android ViewPager,分片换分片
EN

Stack Overflow用户
提问于 2012-10-14 20:21:27
回答 2查看 4.5K关注 0票数 4

我有一个有2页的浏览页,在每个片段上我放了一个切换片段的按钮,但如果我改变方向切换就不起作用了。对于使用OnChangePageButtonClick接口切换片段I,为什么会发生这种情况?

ViewPager活动:

代码语言:javascript
复制
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);        
    }

}

我的Frgamnet:

代码语言:javascript
复制
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;

}

播放列表片段类似于MainPage片段。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-15 16:55:44

您的片段存储了对ViewPagerMusic活动的引用。但是,在轮换之后,活动被销毁并重新创建,因此片段现在包含对旧活动的引用。

您可以从片段中调用活动的方法,而不是存储对活动的引用,如下所示:

代码语言:javascript
复制
((ViewPagerMusic) getActivity()).selectPage(1);
票数 9
EN

Stack Overflow用户

发布于 2014-07-24 22:30:02

只需在视图分页程序中创建此方法

@Override

代码语言:javascript
复制
public void selectPage(int page) {
    vp.setCurrentItem(page);        
}

然后在onclick方法中调用它

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12882138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档