片段添加或替换不起作用

EGH*_*HDK 57 java android android-fragments

我正在使用此参考中的代码.

当我在我的程序中输入该代码时,我得到一个错误,如下图所示. 在此输入图像描述

出错的原因是什么? 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();
    }
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里:

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;
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 166

这里的问题是你正在混合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();
Run Code Online (Sandbox Code Playgroud)

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

  • 您的活动需要扩展FragmentActivity,而不是Activity. (12认同)
  • 是的,某种形式的'FragmentActivity`.有扩展类,例如`ListFragmentActivity`或`SherlockFragmentActivity`(如果使用ActionBarSherlock),但是,所有`Activity`s handling`Fragies`必须扩展某种形式的`FragmentActivity`. (2认同)

why*_*yoz 7

虽然这个问题可能已得到解答,但应该注意的是,重叠片段的解决方案是使用新的"片段"实例获取片段ID(实际上是在xml中声明的FrameLayout id会导致头痛):

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

我不能告诉你我在邮寄后没有解决方案花了多少小时.我在上面的评论中读到了你的另一篇帖子,我也会在那里回答,以防有人先发现.

对于那些正在获得的人ClassCastException,请尝试这一点.您可以使用FragmentActivity代替的方法添加所有正确的库Fragment,并在代码中使用getActivity().getSupportFragmentManager来阻止ListFragment中的错误,并且您仍然会遇到Fragments的问题.Google文档并没有向您显示所有内容,Eclipse代码完成并不总能为您节省...有时您只需自己修复错误!