Android FragmentPagerAdapter滑动以显示ListView 1/3屏幕宽度
编辑: 我想有一个视图,当向右滑动时,会显示listView。非常类似于在新的Google Play商店中实现的内容(下图示例)。我认为这是一个浏览页面,但我试图复制它,但没有成功。我想可能只是“listView页面”宽度属性被设置为特定的dp,但这不起作用。我也尝试过修改,但不明白谷歌是如何做到这一点的 我走对了吗?如果有人知道如何复制这个,我将不胜感激。我认为这可能成为平板电脑上显示导航视图的一种流行的新方式。。。。?代码将是最好的帮助。谢谢 向右滑动: 芬兰式刷卡;布局显示列表和第二个片段的部分(完全如图所示)列表片段不填充屏幕: 当用户向左滑动时,仅显示主页面,如果用户再次向左滑动,则viewPager将继续进入下一页。是 如果正在使用,则可以使用Android FragmentPagerAdapter滑动以显示ListView 1/3屏幕宽度,android,android-listview,android-viewpager,google-play,fragmentpageradapter,Android,Android Listview,Android Viewpager,Google Play,Fragmentpageradapter,编辑: 我想有一个视图,当向右滑动时,会显示listView。非常类似于在新的Google Play商店中实现的内容(下图示例)。我认为这是一个浏览页面,但我试图复制它,但没有成功。我想可能只是“listView页面”宽度属性被设置为特定的dp,但这不起作用。我也尝试过修改,但不明白谷歌是如何做到这一点的 我走对了吗?如果有人知道如何复制这个,我将不胜感激。我认为这可能成为平板电脑上显示导航视图的一种流行的新方式。。。。?代码将是最好的帮助。谢谢 向右滑动: 芬兰式刷卡;布局显示列表和第二个
ViewPager
在它们之间滑动
组合片段
和ViewPager
在您的特定情况下,您可能希望创建一个
列表片段
,然后实现查看页面
最后一次阅读您的问题。。。确保还为每个尺寸的设备设置了特定的布局。在您的屏幕截图中,看起来您正试图在平板电脑上运行此功能。你在电话上得到同样的结果吗
设置布局
确保您的布局与此相似,并具有ViewPager:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/body_background">
<include layout="@layout/pagerbar" />
<include layout="@layout/colorstrip" />
<android.support.v4.view.ViewPager
android:id="@+id/example_pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
设置片段
当您设置实际的ListFragment(ListView)时,您可以使用如下参数创建多个实例:
public static final int PAGE_LEFT = 0;
public static final int PAGE_RIGHT = 1;
static MyFragment newInstance(int num) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("num", num);
fragment.setArguments(args);
return fragment;
}
当您重新加载ListView时(无论您决定如何实现),您都可以使用如下参数确定您在哪个片段实例上:
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
如果您单步执行代码,您会注意到它将单步执行每个实例,因此上述代码仅在您的onCreate中需要,重载方法可能如下所示:
private void reloadFromArguments() {
/* mNum is a variable which was created for each instance in the onCreate */
switch (mNum) {
case PAGE_LEFT:
/* maybe a query here would fit your needs? */
break;
case PAGE_RIGHT:
/* maybe a query here would fit your needs? */
break;
}
}
很少有资源可以帮助您提供示例,您可以从中构建,而不是从头开始:
更多来自操场的解释和例子。
指的是:
更多信息和一些好的链接。
如果你有更具体的问题,我可以随时编辑(更新)我的答案来回答你的问题。祝你好运!:) 我认为您希望在标准之外实现“侧导航” 我读过两篇关于这种模式的不同文章: 模式本身上的第一个: 第二个是关于由谁来建造它的更详细的方法: Cyril Mottier飞入应用程序菜单
第二篇文章在Android Ui模式博客中引用。很抱歉更新太晚。我只做了很少的修改就实现了。仅当ViewPager id为“0”时,使用GestureDetector的条件语句将其扫入视图。我还在我的ActionBar中添加了一个切换,通过一个小技巧,该行为可以通过ViewPager中的ScrollView行为实现。如果只想限制最左边片段的区域,可以限制ScrollView的滚动限制 就你而言: 在ViewPager的onPageChangeListener中,执行以下操作:
@Override
public void onPageScrollStateChanged(int arg0) {
restrictLeftScroll();
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
restrictLeftScroll();
}
@Override
public void onPageSelected(int arg0) {
}
private void restrictLeftScroll() {
if (display != null) {
/* get display size */
Point size = new Point();
display.getSize(size);
/* get desired Width of left fragment */
int fragmentWidth = getResources().getDimensionPixelSize(R.dimen.category_fragment_width);
if (mViewPager.getScrollX() < size.x - fragmentWidth) {
mViewPager.scrollTo(size.x - fragmentWidth, mViewPager.getScrollY());
}
}
}
@覆盖
公共无效onPageScrollStateChanged(int arg0){
restrictLeftScroll();
}
@凌驾
已滚动页面上的公共void(int arg0、float arg1、int arg2){
restrictLeftScroll();
}
@凌驾
已选择页面上的公共无效(int arg0){
}
私有void restrictLeftScroll(){
如果(显示!=null){
/*获取显示大小*/
点大小=新点();
display.getSize(size);
/*获取所需的左片段宽度*/
int fragmentWidth=getResources().getDimensionPixelSize(R.dimen.category\u fragment\u width);
if(mViewPager.getScrollX()
这段代码对我来说毫无问题 以下代码达到了预期效果: 在
页面适配器中
:
@Override
public float getPageWidth(int position) {
if (position == 0) {
return(0.5f);
} else {
return (1.0f);
}
只是一个滑动抽屉@布伦德尔甚至没有-看看新市场-又名“游戏商店”。Thnx当我使用片段寻呼机时,我似乎记得谷歌的代码假设所有屏幕的大小都相同。我认为另一种方法是考虑列表片段(0以上)和页面(1和2以上)是单独的可显示元素。当视图寻呼机位于第一个元素(1)处并收到向左滑动手势时,使用片段转换修改视图布局,使其与最终图像相似。这应该可以通过在家长活动中设置手势设施来实现。@Nick Campion这是我正在使用的,效果非常好。Thnx但这也是我一直在玩的东西。我不知道如何让片段0(或第一页)不占据整个屏幕。请查看Play Store应用程序。如果您遇到布局问题,请调整布局。你必须为你的
碎片充气。啊,等等。我想你说的是片段之间的间隔。如果是这种情况,那么使用setPageMargin()
和ViewPager
在每个片段之间创建空间。是的,它可以。。。比特它只适用于单个不同宽度的碎片:/@skyma不确定你遇到了什么??它完全可以自定义。我没有时间运行代码,但看起来我只能有一个不同宽度的“页面”,并且可以使用任何类似ViewPager(带适配器的视图)的东西:/@skyman你可以有任意多的页面
@Override
public float getPageWidth(int position) {
if (position == 0) {
return(0.5f);
} else {
return (1.0f);
}