错误:(31,40)错误:不兼容的类型:android.support.v4.app.Fragment无法转换为android.app.Fragment

时间:2017-05-15 13:13:33

标签: java android

我在这段代码中遇到问题,我不知道应该使用哪一个android.support.v4.app.Fragment或android.app.Fragment;

public class MainActivity extends AppCompatActivity {

private SharedPreferences pref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pref = getPreferences(0);
        initFragment();
    }

    private void initFragment(){
        android.support.v4.app.Fragment fragment;
        if(pref.getBoolean(Constants.IS_LOGGED_IN,false)){
            fragment = new ProfileFragment();
        }else {
            fragment = new LoginFragment();
        }
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_frame,fragment);
        ft.commit();
    }

}

1 个答案:

答案 0 :(得分:2)

不要将 android.support.v4.app.Fragment android.app.Fragment 不匹配,在整个应用中使用其中任何一个。

private void initFragment(){
    android.support.v4.app.Fragment fragment;
    if(pref.getBoolean(Constants.IS_LOGGED_IN,false)){
        fragment = new ProfileFragment();
    }else {
        fragment = new LoginFragment();
    }
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_frame,fragment);
    ft.commit();
}

private void initFragment(){
    android.app.Fragment fragment;
    if(pref.getBoolean(Constants.IS_LOGGED_IN,false)){
        fragment = new ProfileFragment();
    }else {
        fragment = new LoginFragment();
    }
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_frame,fragment);
    ft.commit();
}

因此,如果您使用支持库,则使用getSupportFragmentManager()并支持其他与支持库相关的方法,否则对于Android应用程序片段的使用不使用支持库函数。它会产生“类型不匹配”的问题。 强烈建议这样做。

支持片段trasaction的库导入:

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

片段交易的Android库导入:

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;