无法从 android.app.FragmentManager 转换为 android.support.v4.app.FragmentManager

Posted

技术标签:

【中文标题】无法从 android.app.FragmentManager 转换为 android.support.v4.app.FragmentManager【英文标题】:cannot convert from android.app.FragmentManager to android.support.v4.app.FragmentManager 【发布时间】:2013-05-17 10:07:44 【问题描述】:

我正在使用平板电脑的 Fragments 创建一个应用程序。到目前为止,我已经在左侧创建了一些按钮,并且在单击按钮时会出现片段。

但我在 MainActivity.java 文件中遇到错误“类型不匹配错误:无法从 android.app.FragmentManager 转换为 android.support.v4.app.FragmentManager”这是我无法实现它的主要原因。我已经导入了 android.support.v4.app.FragmentManager

我该如何解决我的问题?

我的 MainActivity.java 代码

      import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity 
    Fragment fragment;
    Button btn1,btn2,btn3,btn4,btn5,btn6;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);
        btn3=(Button)findViewById(R.id.btn3);
        btn4=(Button)findViewById(R.id.btn4);
        btn5=(Button)findViewById(R.id.btn5);
        btn6=(Button)findViewById(R.id.btn6);

        FragmentManager fm=getFragmentManager();
        FragmentTransaction ft=fm.beginTransaction();

        StartFragment myfragment=new StartFragment();
        ft.add(R.id.myfragment,myfragment);
        ft.commit();
        btn4.setOnClickListener(btnOnClickListener);
        btn5.setOnClickListener(btnOnClickListener);
        btn6.setOnClickListener(btnOnClickListener);
    



        Button.OnClickListener btnOnClickListener=new Button.OnClickListener()
            @Override

            public void onClick(View v)
            
                Fragment newfragment;
                if(v==btn1)
                
                    newfragment=new Fragment1();
                
                else if(v==btn2)
                
                    newfragment=new Fragment2();
                
                else if(v==btn3)
                
                    newfragment=new Fragment3();
                
                else if(v==btn4)
                
                    newfragment=new Fragment4();
                
                else if(v==btn5)
                
                    newfragment=new Fragment5();
                
                else if(v==btn6)
                
                    newfragment=new Fragment6();
                
                else 
                
                    newfragment=new StartFragment();
                
                FragmentTransaction transaction=getFragmentManager.beginTransaction();
                transaction.replace(R.id.myfragment,newfragment);
                transaction.addToBackStack(null);
                transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                transaction.commit();
            
        ;
        

【问题讨论】:

【参考方案1】:

您需要在代码中使用getSupportFragmentManager(),而不是getFragmentManager() - 请参阅here 了解更多详情。

您还需要从android.support.v4.app.FragmentActivity 扩展您的类,而不仅仅是从标准android.Activity 来获取此方法。

【讨论】:

是的,您可以使用 David 的建议。它在我的情况下有效。 感谢大卫的热心帮助。它成功了,现在我正在继续努力。 值得注意的是,您现在也可以从 Activity 扩展 ActionBarActivity 如果我的类扩展了 Fragment 并且我正在使用 FragmentPagerAdapter 那么我该怎么办? 感谢您的解释

以上是关于无法从 android.app.FragmentManager 转换为 android.support.v4.app.FragmentManager的主要内容,如果未能解决你的问题,请参考以下文章

无法从资源加载位图

为啥我无法从 Alamofire 获取请求结果

DateTimeParseException:无法解析文本:无法从 TemporalAccessor 获取 LocalDateTime

无法从 'char[]' 转换为 'string[]' [关闭]

无法远程调试应用程序 - 端口无法从外部访问

无法从状态 '' 解析 '...'