2

Я реализовал бесконечный ViewPager in situ https://github.com/JoachimR/AnyDayViewPager. Однако, вместо использования PagerTabStrip, я бы предпочел использовать CoordinatorLayout с TabLayout. Но при настройке TabLayout с помощью viewpager (я предполагаю, что существует «бесконечное количество фрагментов ViewPager»), приложение застревает.Бесконечный ViewPager с TabLayout

Как я могу решить эту проблему?

Вот код (другие файлы, которые я не изменились, можно найти на JoachimR/AnyDayViewPager, например, FragmentContent.java, CachingFragmentStatePagerAdapter.java, TimeUtils.java, и т.д.)

MainActivity.java

import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.support.design.widget.TabLayout; 
import android.os.Bundle; 

import java.util.Calendar; 

public class MainActivity extends FragmentActivity { 

    private static Context mContext; 

    private CachingFragmentStatePagerAdapter adapterViewPager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mContext = this; 

     ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager); 
     adapterViewPager = new MyPagerAdapter(getSupportFragmentManager()); 
     vpPager.setAdapter(adapterViewPager); 

     // set pager to current date 
     vpPager.setCurrentItem(TimeUtils.getPositionForDay(Calendar.getInstance())); 

     /** THIS IS WHERE THE ISSUES ARISE **/ 
     TabLayout tabLayoutDiary = (TabLayout) findViewById(R.id.diary_tabs); 
     tabLayoutDiary.setupWithViewPager(vpPager); 

    } 

    public static class MyPagerAdapter extends CachingFragmentStatePagerAdapter { 

     private Calendar cal; 

     public MyPagerAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
     } 

     @Override 
     public int getCount() { 
      return TimeUtils.DAYS_OF_TIME; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      long timeForPosition = TimeUtils.getDayForPosition(position).getTimeInMillis(); 
      return FragmentContent.newInstance(timeForPosition); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      Calendar cal = TimeUtils.getDayForPosition(position); 
      return TimeUtils.getFormattedDate(mContext, cal.getTimeInMillis()); 
     } 


    } 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:fab="http://schemas.android.com/tools"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
     <android.support.design.widget.TabLayout 
      android:id="@+id/diary_tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="scrollable"/> 
    </android.support.design.widget.AppBarLayout> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/vpPager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

</android.support.design.widget.CoordinatorLayout> 

ответ

2

Возможно, из-за этой ошибки: https://code.google.com/p/android/issues/detail?id=180027

TabLayout создает вкладку TextView для каждой страницы в вашем ViewPager, а не динамически создавать и рециркуляции TextViews. Как вы видите, это просто взорвется, если вы попытаетесь подделать бесконечный ViewPager.

К сожалению, на данный момент никаких исправлений нет. Вы можете попробовать использовать https://github.com/nshmura/RecyclerTabLayout, который был связан с ошибкой, но я не использовал его сам.

+1

Благодарим за отзыв! Реализовано в RecyclerTabLayout с успехом. – user1301593

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