Фрагмент добавить или заменить не работает
Я использую код из ссылка.
Когда я вставляю этот код в свою программу, я получаю сообщение об ошибке, как показано на рисунке ниже.
![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;
Ответы
Ответ 1
Проблема в том, что вы смешиваете 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
НЕ взаимозаменяемы. Они достигают той же цели, но не могут быть заменены друг другом в коде.
Ответ 2
Несмотря на то, что на этот вопрос, возможно, был дан ответ, следует отметить, что решение для перекрытия фрагментов состоит в том, чтобы получить идентификатор фрагмента (фактически, идентификатор 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 не всегда спасет вас... иногда вам просто нужно исправить ошибку самостоятельно.
Ответ 3
Независимо от того, что я пробовал (включая те, которые были написаны здесь), я не мог решить эту проблему, пока не увидел этот ответ
fooobar.com/questions/58665/...
Ответ 4
Thisworked for me
android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
Ответ 5
Попытайся
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();