Anroid studio遇到的问题8---wrong 2nd argument type found 'android.app.Fragment.' required 'Android.suppo

8. wrong 2nd argument type found 'android.app.Fragment.' required 'Android.support.v4.app.Fragment'


rt,使用fragment的时候报以上错误。

wrong 2nd argument type found
'android.support.v4.app.Fragment.' required 'Android.app.Fragment'
  • 1
  • 2

解决了半天!发现错误其实很简单,首要的是解读错误信息:第二个参数类型为android.app.Fragment,要求Android.app.support.v4.Fragment类型(其实就是参数类型错误)



Fragment是界面的一部分,经常被用于滑动界面,可以将多个fragment组合用于一个activity中,它具有生命周期和事件。


Fragment的包为 android.app.Fragment, 但是由于其对3.0下版本不兼容,所以要 引入 android.support.v4.app.Fragment 两个包对Fragment相同方法的定义有所不同,因此在import时,经常容易混淆导致程序报错!!!(以下是我的部分代码)


import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

import com.gym.zgbj.Fragment.LeftMenuFragment;
import com.gym.zgbj.Fragment.ContentFragment;

 private void initFragment() {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();// 开始事务
        transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(),
                TAG_LEFT_MENU);// 用fragment替换帧布局;参1:帧布局容器的id;参2:是要替换的fragment;参3:标记
        transaction.replace(R.id.fl_main, new ContentFragment(), TAG_CONTENT);
        transaction.commit();// 提交事务
        // Fragment fragment =
        // fm.findFragmentByTag(TAG_LEFT_MENU);//根据标记找到对应的fragment
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
 transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(),
 TAG_LEFT_MENU);
  • 1
  • 2


transaction.replace这一条语句报了错!其实看以上代码并发现不了错误,我导入的是android.support.v4.app包,而且在获取FragmentManager 使用的也是getSupportFragmentManager函数。一步步推理,
最终发现是LeftMenuFragment继承的Fragment,导入的是Android.app.Fragment包!
所以错误还是导错包!!!!!!!(泪奔)



总结


1.如果你导入的是Android.app.Fragment’包(即本地的jar包)
import android.app.Fragment;
那么在获得FragmentManager时,使用的应该是
FragmentManager fm = getFragmentManager();,对应的fragment也要导入对应的包!



2.如果你导入的是android.support.v4.app.Fragment.包(即v4包)
import android.support.v4.app.Fragment;
那么在获得FragmentManager时,使用的应该是
FragmentManager fm = getSupportFragmentManager();
对应的fragment也要导入对应的包!


一定要注意你所继承的fragment,导入的是哪个包!

这个讲解了fragment,学习学习
http://blog.csdn.net/qq_16444837/article/details/48183877

你可能感兴趣的:(Android,Studio)