私はこれからのコードを使用しています 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;
ここでの問題は、_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
は互換性がないことに注意することが重要です。これらは同じ目的を達成しますが、コード内で相互に置き換えることはできません。
この質問には答えられたかもしれませんが、重複するフラグメントの解決策は、新しい「フラグメント」インスタンスでフラグメント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のエラーを停止すると、引き続き問題が発生します。フラグメント。 Googleドキュメントではすべてが表示されるわけではなく、Eclipseのコード補完が常にあなたを救うわけではありません...時にはバグを自分で修正しなければならないこともあります!!
これは私のために働いた
Android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
試してみてください
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
ここで書かれたものを含め、私が何を試みたとしても、この答えを見るまでこの問題を解決できませんでした