[英]Android: how to convert activities to fragments in order to use the navigation drawer correctly?
[英]how to use navigation drawer with tab viewer updating fragments
我使用标签视图创建导航抽屉,没关系。 但是,当我通过ViewPager在tabView上滑动itens时,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时线程将发生变化。
我的疑问是:如何在关闭时返回正确的头寸位置,例如片段1和2。
您将返回Fragment并设置位置为时已晚,因为在任何给定的ViewPager更改中getItem
都会被多次调用,具体取决于当前页面和已加载的内容。
以下代码应设置position参数,然后返回带有正确参数的Fragment。
@Override
public Fragment getItem(int position) {
Fragment frag = null;
final Bundle b = new Bundle();
b.putInt("position", position);
switch (position) {
case 0:
frag = Fragment.instantiate(mContext, Lte700Fragment.class.getName());
frag.setArguments(b);
return frag;
case 1:
frag = Fragment.instantiate(mContext, Lte18Fragment.class.getName());
frag.setArguments(b);
return frag;
case 2:
frag = Fragment.instantiate(mContext, Lte25Fragment.class.getName());
frag.setArguments(b);
return frag;
default:
return null;
}
// End the switch, end the method.
}
可能看起来像是重复的代码,但实际发生的情况略有不同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.