【发布时间】:2017-09-20 01:22:18
【问题描述】:
我用标签视图创建导航抽屉,没关系。但是,当我通过 ViewPager 在 tabView 上滑动项目时,函数 getItem 不会返回发生的情况。
我的活动:
setupNavDrawer(4);
FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.container);
getLayoutInflater().inflate(R.layout.activity_lte, contentFrameLayout);
String[] titles = {"700Hz", "1800Hz", "2500Hz"};
tabAdapter = new TabAdapter4(getSupportFragmentManager(), this,titles);
mviewPager = (ViewPager) findViewById(R.id.vp);
mviewPager.setAdapter(tabAdapter);
getSupportActionBar().setElevation(0);
tabAdapter = new TabAdapter4(getSupportFragmentManager(), this,titles);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mviewPager);
MyTabAdapter:
public TabAdapter4(FragmentManager fm, Context c, String[] titles) {
super(fm);
this.fm = fm;
this.titles = titles;
this.mContext = c;
}
@Override
public Fragment getItem(int position) {
Fragment frag = null;
switch (position) {
case 0:
//frag = new Lte700Fragment();
frag = Fragment.instantiate(mContext, Lte700Fragment.class.getName());
break;
case 1:
//frag = new Lte18Fragment();
frag = Fragment.instantiate(mContext, Lte18Fragment.class.getName());
break;
case 2:
//frag = new Lte25Fragment();
frag = Fragment.instantiate(mContext, Lte25Fragment.class.getName());
break;
default:
}
Bundle b = new Bundle();
b.putInt("position", position);
frag.setArguments(b);
return frag;
}
@Override
public int getCount() {
return 3;//titles.length;
}
@Override
public CharSequence getPageTitle(int position){
return (titles[position]);
}
片段已更改,但 getItem 中的“位置”与实际不对应。当我是第一个片段时,位置返回 0 和 1,当我是第二个片段时返回 2,并且在第三个片段上不返回任何内容。
这对我的应用程序是有害的,因为我需要通过片段生命周期来控制 AsyncTask,因为当片段为 onPause 或 onResume 时线程会发生变化。
我的疑问是:当我使用 3 时,如何返回正确的位置来关闭,例如片段 1 和 2。
【问题讨论】:
-
你意识到你用完全相同的信息设置了两次
mviewPager,对吧? -
ViewPagers 默认总是加载当前页面和当前项目旁边的两个页面。例如第 1 页将加载位置 0 和 2。这就是它们的工作方式
-
"你意识到你用完全相同的信息设置了两次 mviewPager,对吧?" =我真的没有意识到,但它不起作用或只调用一次
-
如果我只想调用当前片段而其他片段将被暂停,我该怎么办?
标签: java android android-fragments