片段添加或替换不起作用

时间:2012-07-23 19:58:05

标签: java android android-fragments

我正在使用此reference.

中的代码

当我在程序中输入代码时,我会收到错误,如下图所示。 enter image description here

出错的原因是什么? 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 个答案:

答案 0 :(得分:164)

这里的问题是你混合了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不可互换。它们实现了相同的目的,但它们不能在代码中相互替换。

答案 1 :(得分:6)

虽然这个问题可能已经得到解答,但应该注意的是,重叠片段的解决方案是使用新的“片段”实例获取片段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中的错误,并且您仍然会遇到Fragments的问题。 Google文档并没有向您显示所有内容,Eclipse代码完成并不总能为您节省...有时您只需自己修复错误!

答案 2 :(得分:0)

这为我工作

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

答案 3 :(得分:0)

尝试

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