Android FragmentPagerAdapter滑动以显示ListView 1/3屏幕宽度

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,但这不起作用。我也尝试过修改,但不明白谷歌是如何做到这一点的 我走对了吗?如果有人知道如何复制这个,我将不胜感激。我认为这可能成为平板电脑上显示导航视图的一种流行的新方式。。。。?代码将是最好的帮助。谢谢 向右滑动: 芬兰式刷卡;布局显示列表和第二个

编辑:

我想有一个视图,当向右滑动时,会显示listView。非常类似于在新的Google Play商店中实现的内容(下图示例)。我认为这是一个浏览页面,但我试图复制它,但没有成功。我想可能只是“listView页面”宽度属性被设置为特定的dp,但这不起作用。我也尝试过修改,但不明白谷歌是如何做到这一点的

我走对了吗?如果有人知道如何复制这个,我将不胜感激。我认为这可能成为平板电脑上显示导航视图的一种流行的新方式。。。。?代码将是最好的帮助。谢谢

向右滑动:

芬兰式刷卡;布局显示列表和第二个片段的部分(完全如图所示)列表片段不填充屏幕:

当用户向左滑动时,仅显示主页面,如果用户再次向左滑动,则viewPager将继续进入下一页。

如果正在使用,则可以使用
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);       
}