我正在使用此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;
答案 0 :(得分:164)
这里的问题是你混合了android.support.v4.app.Fragment
和android.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();