如何在 Android 上实现嵌套的主要细节流程?

How to implement a nested master detail flow on Android?

我有一个列表,在列表中,在列表中,等等。大约有 5 层。

在手机上为每个列表创建 5 个活动很容易,但如果我也想支持平板电脑怎么办?所以我需要使用主细节流程。

但是,我似乎找不到任何与嵌套主从细节流程相关的教程或信息。

无论如何,这是我所描述内容的示例:

在平板电脑布局中,我希望屏幕一次移动 2 层。用户可以通过从右侧层中选择列表项来前进到下一层。要返回上一层,用户可以点击后退按钮。

知道如何实现吗?

在网上翻了一整天,终于找到了解决办法。要获得 "Nested Master Details Flow" 效果,只需使用带有 FragmentPageAdapter 的 ViewPager。主从流程将如下所示:

要在用户切换到横向时更改为双面板模式,请在扩展的 FragmentPagerAdapter class 中覆盖以下方法:

@Override
public float getPageWidth(int position) {
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    // if the width is greater than 900dp halve the width of the page
    if ((metrics.widthPixels / metrics.density) > 900) {
        return (0.5f);
    }
    return super.getPageWidth(position);
}

为视图寻呼机提供 "up button":

viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    // This method will be invoked when a new page becomes selected.
    @Override
    public void onPageSelected(int position) {
        if (position == 0) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        } else {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }

    }
});

你可以告诉 "up button" 像这样返回一个页面(其中 viewpager 是你的 activity 的成员变量,保存对你的 ViewPager 的引用):

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int position = viewpager.getCurrentItem();
    if (position > 0) viewpager.setCurrentItem(position-1);
    return true;
}

参考资料:

ViewPager with FragmentPagerAdapter

Display back button on action bar

Multiple-View ViewPager Options

How to implement a ViewPager with different Fragments / Layouts and example github project