Фрагмент добавить или заменить не работает
Я использую код из этого ссылка.
когда я вставляю этот код в свою программу, я получаю ошибку, как показано на рисунке ниже.

какие-либо причины для ошибки?
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 ответов:
проблема здесь в том, что вы смешиваете
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не заменимы. Они достигают одной и той же цели, но не могут быть заменены друг другом в коде.
хотя на этот вопрос, возможно, был дан ответ, следует отметить, что решение для перекрывающихся фрагментов состоит в том, чтобы получить идентификатор фрагмента (на самом деле идентификатор FrameLayout как объявление в вашем xml приведет к головной боли) со свежим экземпляром "фрагмента":
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 не всегда спасет вас...иногда вам просто нужно исправить ошибку самостоятельно!!
независимо от того, что я пробовал (включая те, которые написаны здесь), я не мог решить эту проблему, пока не увидел этот ответ
это сработало для меня
android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
Comments