片段添加或替换不起作用

2022-08-31 16:45:48

我正在使用此引用中的代码

当我将该代码放入程序中时,我收到一个错误,如下图所示。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();
    }

示例碎片.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;

答案 1

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

例如,类似这样的东西:

    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();

重要的是要注意,支持库和正常库不可互换。它们实现了相同的目的,但它们不能在代码中相互替换。FragmentFragment


答案 2

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

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

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

对于那些正在得到一个的人,也试试这个。你可以添加所有正确的库,而不是 ,并在代码中使用 getActivity().getSupportFragmentManager 来阻止 ListFragment 中的错误,你仍然会遇到 Fragments 的问题。Google文档不会向您显示所有内容,Eclipse代码完成功能并不总是可以节省您...有时你只需要自己修复错误!ClassCastExceptionFragmentActivityFragment


推荐