2016-08-29 7 views
2

У меня есть ViewPager, что я хочу добавить Фрагменты. ViewPager просматривается правильно на экране, но, к сожалению, он не содержит никакого контента.Фрагмент не виден в ViewPager

Я видел предложение в каком-то posts заменить

getSupportFragmentManager() 

с

getChildFragmentManager() 

Но мне нужно ActionBar. К сожалению, ChildFragmentmanager недоступен в AppCompatActivity.

В процессе отладки я понял, что метод Fragment's onCreateView() вызывается и возвращает макет.

Вопрос: Как я могу сделать видимым Fragments? И было ли основное отличие от моего кода от этого sample?

активность:

public class ViewPagerActivity extends AppCompatActivity { 

    private ViewPager mViewPager; 

    private List<Location> locationList = new ArrayList<>(); 
    private locationsBaseHandler db; 
    private CustomPagerAdapter mAdapter; 

    private Location mLocation; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_viewpager); 

     locationList.add(someData); 

     mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mAdapter = new CustomPagerAdapter(this, getSupportFragmentManager(), locationList); 

     mViewPager.setAdapter(mAdapter); 

    } 

} 

Пейджер адаптер:

public class CustomPagerAdapter extends FragmentPagerAdapter { 

    private Context mContext; 
    private List<Location> locationList = new ArrayList<>(); 

    public CustomPagerAdapter(Context mContext, FragmentManager fm, List<Location> locationList) { 
     super(fm); 

     this.locationList.addAll(locationList); 
     this.mContext = mContext; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return LocationFragment.newInstance(position); 
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return false; 
    } 
} 

Фрагмент:

public class LocationFragment extends Fragment { 
    private static final String ARG_LAYOUT_ID = "page_number"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View layout = inflater.inflate(R.layout.fragment_location, container, false); 

     return layout; 
    } 

    public static LocationFragment newInstance(int selectedIdForIndex) { 
     LocationFragment fragment = new LocationFragment(); 

     Bundle args = new Bundle(); 
     args.putInt(ARG_LAYOUT_ID, selectedIdForIndex); 
     fragment.setArguments(args); 

     return fragment; 
    } 

    public int getPageNumber() { 
     return getArguments().getInt(ARG_LAYOUT_ID); 
    } 
} 

ответ

2

Попытка удалить метод isViewFromObject в CustomPagerAdapter.

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return false; 
} 

Мы можем увидеть этот комментарий isViewFromObject:

Определяет, будет ли страница View связана с конкретным ключевым объектом в возвращаемой {@link #instantiateItem (ViewGroup, Int)}. Этот метод равен , который необходим для правильной работы PagerAdapter.