【问题标题】:Viewpager empty dataset : display messageViewpager 空数据集:显示消息
【发布时间】:2015-03-25 12:27:30
【问题描述】:

我有一个 FragmentViewPager,它有一个数据集,其中包含可变数量的条目。用户可以删除该数据集的条目,因此数据集可以为空(其中包含 0 个条目)。

当数据集为空时,ViewPager 显示一个空片段,但我想要显示一个带有 textView 的片段,显示“没有条目,请添加一个...”,这可能吗?我不知道该怎么做。

第一张是我现在得到的,第二张是我想要达到的。

这是我的 FragmentViewPager 的代码:

private class ConfirmGamePagerAdapter extends FragmentStatePagerAdapter {
    public ConfirmGamePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        return ConfirmGameFragment.newInstance(games.get(position));
    }

    @Override
    public int getCount() {
        return games.size();
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

编辑:包含 ViewPager 的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_linearlayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_height="?attr/actionBarSize"
    android:layout_width="match_parent"
    android:background="#000000">
 </android.support.v7.widget.Toolbar>

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#3F3F3F">

    <martin.hogge.be.lolmatchup.utils.NonSwipeableViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- The navigation drawer -->
    <ListView android:id="@+id/list_drawer"
    android:layout_width="250dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#1a1c25"/>

</android.support.v4.widget.DrawerLayout>

编辑:我的自定义 ViewPager

public class NonSwipeableViewPager extends ViewPager {

    public NonSwipeableViewPager(Context context) {
        super(context);
    }

    public NonSwipeableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    } 

}

提前感谢您的回答。

【问题讨论】:

  • 嗨,你能告诉我你声明视图寻呼机中的布局文件吗?
  • 还有一点是 ConfirmGamePagerAdapter 使用游戏数据集是正确的!如果您的游戏数据集列表为空,您希望显示自定义的空消息,例如“EMPTY DATASET Please add entry”。
  • @BhavdipPathar 我将其添加到布局中。是的,就是这样,我想显示一条自定义的空消息。
  • "martin.hogge.be.lolmatchup.utils.NonSwipeableViewPager" 这是您的自定义 FragmentViewPager 正确!
  • 我添加了自定义 viewPager,但认为这与我的问题无关。

标签: android android-fragments android-viewpager dataset


【解决方案1】:

@Shargotth 我知道它与您的自定义 viewPager 无关,很容易在自定义视图寻呼机后面添加空视图,请参阅下面我如何在自定义视图寻呼机后面添加空视图。此文本视图始终存在于您的布局中,但是当您的数据集不为空或为空时,您的自定义视图页面将覆盖文本视图,因为您的自定义视图寻呼机位于框架布局内。我相信这会对你有所帮助。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_linearlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#000000" >
    </android.support.v7.widget.Toolbar>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#3F3F3F" >

        <!-- The main content view -->

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:id="@android:id/empty"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/empty_listview"
                android:textSize="@dimen/one_six_sp" />

            <martin.hogge.be.lolmatchup.utils.NonSwipeableViewPager
                android:id="@+id/pager"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

            <ListView>
            </ListView>
        </FrameLayout>

        <!-- The navigation drawer -->

        <ListView
            android:id="@+id/list_drawer"
            android:layout_width="250dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="#1a1c25"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp" />
    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

如果您有任何问题或反馈,请告诉我,让我们试试 :)))

【讨论】:

  • 感谢您的回答!我喜欢只编辑布局而不对 java 文件进行任何更改的想法。我添加到您的解决方案中的唯一一件事是,我将 FrameLayout 的可见性设置为“GONE”,并在数据集为空时将其设置为“VISIBLE”(ViewPager 中的片段没有覆盖所有布局,所以我们可以看到消息的一部分)。还是谢谢!
【解决方案2】:

像这样更改您的 fragmentViewPager 适配器类。它可能有助于解决您的问题。

    private class ConfirmGamePagerAdapter extends FragmentStatePagerAdapter {
    public ConfirmGamePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
    if(games.size()==0)
      return fragmentWhichShowsYourCustomNoData;
    else
        return ConfirmGameFragment.newInstance(games.get(position));
    }

    @Override
    public int getCount() {
        if(games.size()==0)
          return 1;
        else
         return games.size();
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

如果这有帮助,请告诉我。

【讨论】:

    【解决方案3】:

    由于您已经在使用片段,我将创建一个新片段(使用 textViews 用于空数据集),并使用replace 方法正确切换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-31
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      相关资源
      最近更新 更多