问题描述
- 安卓,actionbar的onTanSelected方法不支持v4包的类,怎么解决?
-
安卓ActionBar.TabListener的onTabSelected方法不支持v4包的FragmentTransaction,怎么解决在ActionBar里添加Tab时,class TabListener implements ActionBar.OnTabListener{ }
里面要复写一个onTabSelected(Tab tab,FragmentTransaction ft){}方法,可是这方法的ft只能用android.app.包里的,用v4包的会报错,可是ft.add()时要用到fragment,把fragment也改成旧的app包的也能解决,但好像有的地方fragment只能用v4包的,那么这时onTabSelected()该怎么复写?例如FragmentActivity,DialogFragment,ListFragment那些都要v4包才能用,难道我把添加在这些tab下的fragment用旧的app包,那些用v4包的?但这样搞了我觉得很容易出问题啊,求怎么解决?ActionBar.onTabSelected(ActionBar.Tab tab,FragmentTrnsaction ft)这里方法里的ft不支持v4包的FragmentTransaction的问题
解决方案
http://blog.csdn.net/ysh06201418/article/details/46373001
解决方案二:
大家好,我是楼主,我试着换了一下写法,大家来看看我这样的改进的写法好不好,有没有什么需要改进的地方:
原来的写法(因为onTabListener不支持v4包的FrgmentTransaction,所以这里所有fragment都是用旧的包的,这种也是网上见的最多的写法)
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
然后,我现在采用的写法,这样能用v4包,也是参考了网上的:
public void onTabSelected(Tab tab,FragmentTransaction ft)
{
switch(tab.getPosition())
{
case 0:
if(f1==null) f1=new Fragment1();
getSupportFragmentManager().beginTransaction().replace(R.id.content, f1).commit();
break;
case 1:
if(f2==null) f2=new Fragment2();
getSupportFragmentManager().beginTransaction().replace(R.id.content, f2).commit();
break;
case 2:
if(f3==null) f3=new Fragment3();
getSupportFragmentManager().beginTransaction().replace(R.id.content, f3).commit();
break;
}
}
大家看看我现在用的这种写法有没有什么改进的地方?
解决方案三:
包直接有冲突之外或引入问题