【问题标题】:android.support.v4.app.FragmentTransaction required需要 android.support.v4.app.FragmentTransaction
【发布时间】:2013-07-01 06:35:47
【问题描述】:

像这样输入代码:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

出现此错误“android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();”并将其作为快速修复,实际上确实消除了错误:

android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

我在扩展 FragmentActivity 的主要活动中输入此内容。有人知道为什么吗?我已经包括:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

编辑

 DescriptionFragment fragment = new DescriptionFragment();
            android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.pager, fragment);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            ft.commit();

将 getSupportFragmentManager() 更改为 getFragmentManager() 需要我将 DescriptionFragment 更改为 android.app.Fragment...有什么想法吗?

【问题讨论】:

  • 添加import android.support.v4.app.FragmentTransaction;import android.support.v4.app.*;
  • 谢谢...似乎给了我这个错误:导入 android.support.v4.app.FragmentTransaction 与另一个导入语句冲突

标签: java android


【解决方案1】:

使用 getSupportFragmentManager() 您将获得 supportLibrary fragmentManager 而不是系统 fragmentManager。因此,您正在处理支持库的事务。

这就是您需要添加所有这些导入并使用 android.support.v4.app 的原因。

如果您想获取系统 fragmentManager,请尝试使用 getFragmentManager() 而不是 getSupportFragmentManager()。

希望对你有帮助

【讨论】:

  • 感谢您的反馈..请检查我更新的问题它仍然给我问题
  • FragmentDescription 是你创建的一个类?它的类型是 Fragment 还是 SupportFragment?
  • FragmentDescription 由我创建并扩展了 Fragment
  • 好吧,我认为您的主要问题是您正在合并 Fragments 方法和 SupportFragments 方法。您需要哪些对象?基本片段还是 SupportFragments?您需要使用支持库吗?如果要使用支持库(与旧系统兼容),则不能使用基本 Fragments 的任何方法,而必须使用兼容库的所有方法。 Fragments 和 supportFragment 不兼容
【解决方案2】:

试试这个

公共类 DescriptionFragment 扩展了 android.support.v4.app.Fragment

而不是简单的片段。

【讨论】:

    【解决方案3】:

    您是否将 android.support.v4.jar 文件导入到您的项目中??

    【讨论】:

    • 不确定添加 .jar 文件是什么意思?我已将其添加到我的构建路径中
    【解决方案4】:

    好的...只需为片段创建一个方法并调用它就像:

    void addfragment(Fragment fragment, boolean addBacktoStack, int transition) {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.simple_fragment, fragment);
        ft.setTransition(transition);
        if (addBacktoStack)
            ft.addToBackStack(null);
        ft.commit();
    
    }
    

    现在只需调用您的片段:

    addfragment(new DescriptionFragment(this),true, FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    

    【讨论】:

    • 似乎正在发生同样的事情.. ft.replace 出现此错误:FragmentTransaction 类型中的方法 replace(int, Fragment) 不适用于参数 (int, Fragment)。这可以通过将开始更改为: void addfragment(android.app.Fragment fragment, boolean addBacktoStack, int transition) {
    • 你必须改变android.support.v4.Fragment。我认为发生此错误是因为您扩展了 android.app.Fragment 的片段,因此您必须使用 android.support.v4.Fragment .. 这样您将获得更好的解决方案。
    【解决方案5】:

    getActivity() 解决我的问题android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();

    【讨论】:

      【解决方案6】:

      在 Activity 中导入 android.app.Fragment .. 在 Fragment 中使用 android.app.Fragment 扩展.. 这解决了我的问题...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多