如何在 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
我有一个列表,在列表中,在列表中,等等。大约有 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