我遇到了不同版本的Fragment相关类的问题 .
在Eclipse中,在Project Properties> Java Build Path> Libraries中,我有:
Android的支持,v4.jar
Android的支持-V7-appcompart.jar
有几个问题讨论类似的问题,但它们似乎让我更加困惑 . 我该如何解决?
MainActivity.java
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
mAdapter = new TabsPagerAdapter(this.getSupportFragmentManager());
Fragment myFragment = mAdapter.getItem(MY_TAB); // error here
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(resources.getInteger(R.id.pager), myFragment, resources.getString(R.string.my_fragment));
...
}
TabPageAdapter.java
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int index) {
...
}
}
编辑(回复评论) . 这就是混乱 .
在MainActivity中,我有:
import android.app.Fragment
将其更改为:
import android support.v4.app.Fragment;
导致此错误:
FragmentTransaction类型中的方法add(int,android.app.Fragment,java.lang.String)不适用于此行上的参数(int,android.support.v4.app.Fragment,java.lang.String) :
fragmentTransaction.add(resources.getInteger(R.id.pager), permitsFragment, resources.getString(R.string.mys_fragment));
更改为使用支持片段管理器会导致此错误:
类型不匹配:无法从android.support.v4.app.FragmentManager转换为此行上的android.app.FragmentManager:
FragmentManager fragmentManager = getSupportFragmentManager();
所以,如果我将所有导入更改为v4:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
然后我在onTabReselected,onTabSelected,onTabUnselected上得到错误说:
MainActivity类型的onTabUnselected(ActionBar.Tab,FragmentTransaction)方法必须覆盖或实现超类型方法
似乎没有ActionBar的v4版本 .
2 回答
您应该使用支持包中的组件,也可以不使用 .
所以它适用于FragmentManager和Fragment .
我经常得到这个,最可能的原因是错误
Fragment
导入,如果你使用内置的android studio方法创建一个Fragment会发生 . (右击=>新=>碎片或类似的东西)你一定在做
改为
然后在处理片段时使用
getSupportFragmentManager()
.