2 freedom wings freedom_wings 于 2016.01.16 22:26 提问

安卓,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的问题

3个回答

devmiao
devmiao   Ds   Rxr 2016.01.16 23:45
freedom_wings
freedom_wings   2016.01.17 09:44

大家好,我是楼主,我试着换了一下写法,大家来看看我这样的改进的写法好不好,有没有什么需要改进的地方:

原来的写法(因为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;
}
}

大家看看我现在用的这种写法有没有什么改进的地方?

menglele1314
menglele1314   2016.01.18 18:11

包直接有冲突之外或引入问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!