Viewpager 空数据集:显示消息
Viewpager empty dataset : display message
我有一个 FragmentViewPager,它有一个包含可变条目数的数据集。用户可以删除该数据集的条目,因此数据集可能为空(其中有 0 个条目)。
当数据集为空时,ViewPager 显示一个空片段,但我想要的是显示一个带有显示 "No entries, please add one..." 的 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;
}
}
预先感谢您的回答。
由于您已经在使用片段,我会制作一个新片段(对于空数据集使用 textViews),并使用 replace
方法正确切换。
@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>
如果您有任何问题或反馈,请告诉我让我们试试:)))
像这样更改您的 fragmentViewPager
适配器 class。它可能有助于解决您的问题。
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;
}
}
如果有帮助请告诉我。
我有一个 FragmentViewPager,它有一个包含可变条目数的数据集。用户可以删除该数据集的条目,因此数据集可能为空(其中有 0 个条目)。
当数据集为空时,ViewPager 显示一个空片段,但我想要的是显示一个带有显示 "No entries, please add one..." 的 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;
}
}
预先感谢您的回答。
由于您已经在使用片段,我会制作一个新片段(对于空数据集使用 textViews),并使用 replace
方法正确切换。
@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>
如果您有任何问题或反馈,请告诉我让我们试试:)))
像这样更改您的 fragmentViewPager
适配器 class。它可能有助于解决您的问题。
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;
}
}
如果有帮助请告诉我。