类型错误 - 在导航抽屉中切换片段

时间:2014-12-15 22:36:28

标签: java android android-fragments navigation-drawer

我的代码存在类型问题。我不明白,因为我的"延伸"是正确的。

@Override
public void onNavigationDrawerItemSelected(int position) {

    FragmentManager fragmentManager = getSupportFragmentManager();

    if (position == 0) {
        fragmentManager.beginTransaction()
                .replace(R.id.container, new HomeFragment())
                .commit();
    } else if (position == 1) {
        fragmentManager.beginTransaction()
                .replace(R.id.container, new AnnouncesFragment())
                .commit();
    }
}

new HomeFragment()new AnnouncesFragment()存在问题。

HomeFragment&& amp;& AnnoncesFragment:

public class HomeFragment extends Fragment {

public class AnnouncesFragment extends Fragment {

AndroidStudio上的错误是:

  

替换(int,android.support.v4.app.Fragment)    FragmentTransaction 无法应用于(int,com.xxx.xxxx.xx.AnnouncesFragment)

在Android doc上: http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html

我如何使用功能 - >

replace(int containerViewId, Fragment fragment)

谢谢,

3 个答案:

答案 0 :(得分:0)

这是因为您在扩展课程时使用的是android.app.Fragment的最新版本。您想要使用android.support.v4.app.Fragment

答案 1 :(得分:0)

在这种情况下,请确保您的片段是android.support.v4.app.FragmentActivity而非android.app.Fragment的实例。

答案 2 :(得分:0)

请确保您所有与片段相关的组件都是android.support.v4.app...的实例,而不是android.app的实例。...

还使用正确的片段管理器创建事务:使用Activity.getSupportFragmentManager()代替Activity.getFragmentManager()

因此您的片段必须像这样:

import android.support.v4.app.Fragment;
...
public class MyFragment extends Fragment {
    ...
}

以及FragmentTransaction的代码:

import android.support.v4.app.FragmentTransaction;
...
{
    MyFragment myFragment = new MyFragment();
    FragmentTransaction ftx = getSupportFragmentManager().beginTransaction();
    ...
    ftx.replace(R.id.my_fragment_id, myFragment);
    ...
    ftx.commit();
}