Android 如何替换ViewPager中的片段

Android 如何替换ViewPager中的片段,android,listview,android-viewpager,fragment,Android,Listview,Android Viewpager,Fragment,我在这个问题上纠结了几天,快把我逼疯了。看起来我正在尝试做的是一个非常常见的用例,但我一辈子都想不出来 因此,问题是:我想替换ViewPager中的片段,并保持Backback的正常操作 我的ViewPager包含两个显示ListView的片段。当处于ViewPager的第一个位置时,我希望能够深入查看ListView,并能够使用后退按钮后退,如下所示: 艺术家->专辑->歌曲 艺术家您可以通过覆盖活动中的onBackPressed方法来管理“backbackback”,并跟踪用户当前处于哪个级

我在这个问题上纠结了几天,快把我逼疯了。看起来我正在尝试做的是一个非常常见的用例,但我一辈子都想不出来

因此,问题是:我想替换ViewPager中的片段,并保持Backback的正常操作

我的ViewPager包含两个显示ListView的片段。当处于ViewPager的第一个位置时,我希望能够深入查看ListView,并能够使用后退按钮后退,如下所示:

艺术家->专辑->歌曲


艺术家您可以通过覆盖活动中的
onBackPressed
方法来管理“backbackback”,并跟踪用户当前处于哪个级别,并根据需要显示或返回活动

@Override
public void onBackPressed(){
    if (mLevel > 1) {
        // in your case probably change the adapter item for the page
        mViewPagerAdapter.notifyDataSetChanged()
    }
    ...
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    final Artist artist = (Artist) adapter.getItem(position);
    itemSelectedListener.onItemSelected(artist);
}
public class ListPagerAdapter extends FragmentPagerAdapter {
    SearchView searchView;
    BrowserFragment browserFragment;
    PlaylistFragment playlistFragment;

    public ListPagerAdapter(SearchView searchView, FragmentManager fm) {
        super(fm);
        this.searchView = searchView;
    }

    public boolean browserFragmentCanGoBack() {
        return browserFragment.canGoBack();
    }

    public void browserFragmentBack() {
        browserFragment.goBack();
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 1) {
            if (playlistFragment == null) {
                playlistFragment = new PlaylistFragment(searchView);
            }
            return playlistFragment;

        } else {
            if (browserFragment == null) {
                browserFragment = new BrowserFragment(searchView);
            }
            return browserFragment;
        }
    }

    @Override
    public int getCount() {
        return 2;
    }
}
@Override
public void onBackPressed() {
    if (viewPager.getCurrentItem() == 0) {
        if (pagerAdapter.browserFragmentCanGoBack()) {
            pagerAdapter.browserFragmentBack();
        } else {
            super.onBackPressed();
        }
    } else {
        viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
    }
}
@Override
public void onBackPressed(){
    if (mLevel > 1) {
        // in your case probably change the adapter item for the page
        mViewPagerAdapter.notifyDataSetChanged()
    }
    ...
}