如何在Android上实现嵌套的主详细信息流?

时间:2016-06-11 01:03:35

标签: android android-layout master-detail

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

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

但是,我似乎无法找到与嵌套主详细信息流关系的任何教程或信息。

无论如何,这里是我所描述的例子:

enter image description here

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

知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

经过一整天的互联网搜索,我终于找到了解决方案。获得"嵌套主数据流程"效果只需使用带有FragmentPageAdapter的ViewPager。 Master Detail Flow将如下所示:

enter image description here

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

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

提供一个"向上按钮"对于查看寻呼机:

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

    }
});

你可以告诉"向上按钮"返回这样的页面(其中viewpager是您活动的成员变量,持有对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 / Layoutsexample github project