在我的项目中,我有一个选项卡布局和一个 fragment View 页面。当我加载 fragment 和选项卡时,选项卡索引和显示的 fragment 不同步,而且当我来回滑动时, fragment 与选项卡不同步。我检查了getItem(int position)
和 getTitle(int position)
方法都具有相同的位置号和ArrayList<Fragments>
中的相应条目。和 ArrayList<String>
(对于选项卡标题)是正确的,但选项卡的显示方式与 View 寻呼机不同步。
这是我的fragmentPagerAdapter.java
public class DetailsFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments;
private ArrayList<String> titles;
public DetailsFragmentPagerAdapter(FragmentManager fm) {
super(fm);
fragments = new ArrayList<>();
titles = new ArrayList<>();
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return titles.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
public void setFragment(Fragment fragment, String title) {
fragments.add(fragment);
titles.add(title);
notifyDataSetChanged();
}
}
这是创建 Activity 。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
tabLayout = (TabLayout) findViewById(R.id.detailsTabs);
viewPager = (ViewPager) findViewById(R.id.viewPager);
new GetCategoriesAsync2().execute();
}
正在调用的异步任务的 doInBackground 正在准备数组列表
和 onPostExecute
@Override
protected void onPostExecute(Void aVoid) {
int size = lists.size();
ArrayList<Fragment> fragments = new ArrayList<>(size);
ArrayList<String> titles = new ArrayList<>(size);
for (int i = 0; i < lists.size(); i++) {
ArrayList<String> x = lists.get(i);
titles.add(x.remove(0));
fragments.add(DetailsListFragment.newInstance(x));
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentPagerAdapter = new DetailsFragmentPagerAdapter(fragmentManager);
fragmentPagerAdapter.setFragments(fragments,titles);
viewPager.setAdapter(fragmentPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
progressDialog.dismiss();
}
我正在使用设计支持库 23.0.1,构建目标是 23。 如何修复此选项卡布局不同步?
最佳答案
如果您使用TabLayout ,您需要将其连接到适配器
If you're using a
ViewPager
together with this layout, you can usesetTabsFromPagerAdapter(PagerAdapter)
which will populate the tabs using the given PagerAdapter's page titles. You should also use aTabLayout.TabLayoutOnPageChangeListener
to forward the scroll and selection changes to this layout like so:
ViewPager viewPager = ...;
TabLayout tabLayout = ...;
viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(tabLayout));
关于android - 查看寻呼机 fragment 和选项卡不同步android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391393/