58

我正在使用this reference中的代码。

当我在我的程序中输入该代码时,出现如下图所示的错误。 在此处输入图像描述

错误的任何原因? The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, ExampleFragments)

我的主要活动中的代码:

public void red(View view) {
        android.app.FragmentManager fragmentManager = getFragmentManager();
                android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        ExampleFragments fragment = new ExampleFragments();
        fragmentTransaction.replace(R.id.frag, fragment);
        fragmentTransaction.commit();
    }

ExampleFragments.java

package com.example.learn.fragments;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ExampleFragments extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.blue_pill_frag, container, false);
    }
}

这里:

package com.example.learn.fragments;

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.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
4

5 回答 5

167

这里的问题是你正在混合android.support.v4.app.Fragmentandroid.app.Fragment. 您需要将所有用途转换为使用支持库,这也意味着调用getSupportFragmentManager().

像这样的东西,例如:

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    ExampleFragments fragment = new ExampleFragments();
    fragmentTransaction.replace(R.id.frag, fragment);
    fragmentTransaction.commit();

重要的是要注意支持库Fragment和法线Fragment是不可互换的。它们达到相同的目的,但在代码中它们不能相互替换。

于 2012-07-23T20:06:00.150 回答
8

尽管可能已经回答了这个问题,但应该注意的是,重叠片段的解决方案是使用新的“片段”实例获取片段 ID(实际上,在您的 xml 中声明的 FrameLayout id 会导致头痛):

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new ExampleFragments();
fragmentTransaction.replace(R.id.frag, fragment);
fragmentTransaction.commit();

我无法告诉你我花了多少小时在一个又一个帖子中没有解决方案。我阅读了您在上面评论中链接的另一篇文章,我也会在那里回答,以防有人首先发现。

对于那些正在获得的人,也可以ClassCastException试试这个。您可以使用FragmentActivity而不是添加所有正确的库Fragment,并在代码中使用 getActivity().getSupportFragmentManager 来阻止 ListFragment 中的错误,但您仍然会遇到片段问题。Google 文档不会向您展示所有内容,并且 Eclipse 代码完成不会总能拯救您……有时您只需要自己修复错误!

于 2013-05-08T22:34:49.273 回答
0

无论我尝试了什么(包括这里写的),在看到这个答案之前我都无法解决这个问题

https://stackoverflow.com/a/5907704/728312

于 2015-05-08T13:27:01.180 回答
0

这对我有用

android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();

于 2017-07-19T13:45:55.227 回答
0

尝试一下

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
于 2019-05-06T11:10:05.613 回答