2015-03-25 2 views
0

У меня есть FragmentViewPager, у которого есть набор данных с переменным количеством записей в нем. Пользователь может удалять записи этого набора данных, поэтому набор данных может быть пустым (в нем 0 записей).Viewpager пустой набор данных: отображаемое сообщение

Когда набор данных пуст, ViewPager показывает пустой фрагмент, но я хотел бы показать фрагмент с текстовым отображением «Нет записей, пожалуйста, добавьте один ...», возможно ли это? Я не могу понять, как это сделать.

enter image description here

Первая картина, что я получил сейчас, и второй из них является то, что я хочу достичь.

Вот код моего 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; 
    } 
} 

Edit: Макет, содержащий 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> 

Edit: Мой заказ 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; 
    } 

}

Заранее благодарю вас за ответы.

+0

Привет, вы можете показать мне файл макета внутри вашего объявления пейджера представления. –

+0

еще один момент: ConfirmGamePagerAdapter правильно использует набор данных игры! если ваш список наборов игровых данных пуст, вы хотите показать пользовательское пустое сообщение типа «ПУСТОЙ ДАННЫЙ ПРОСМОТР, добавьте запись». –

+0

@BhavdipPathar Я добавляю его в макет. И да, я хочу показать пользовательское пустое сообщение. – MHogge

ответ

2

@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> 

Позвольте мне знать, если у вас есть вопросы или пожелания давайте попробуем :)))

+0

Спасибо за ваш ответ! Мне понравилась идея просто изменить макет и не вносить никаких изменений в java-файлы. Единственное, что я добавил к вашему решению, это то, что я поставил видимость FrameLayout на «GONE» и установил его в «VISIBLE», когда набор данных пуст (фрагмент в ViewPager не охватил весь макет, поэтому мы мог видеть часть сообщения). Все еще благодарю! – MHogge

1

Поскольку вы уже работаете с фрагментом, я бы сделал новый (с textViews для пустого набора данных) и использовал метод replace для правильного переключения.

1

Измените класс 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; 
    } 
} 

дайте мне знать, если это поможет.

Смежные вопросы