web-dev-qa-db-ja.com

フラグメントの追加または置換が機能しない

私はこれからのコードを使用しています reference。

プログラムにそのコードを挿入すると、次の図に示すようにエラーが発生します。 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;
55
EGHDK

ここでの問題は、_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は互換性がないことに注意することが重要です。これらは同じ目的を達成しますが、コード内で相互に置き換えることはできません。

164
Eric

この質問には答えられたかもしれませんが、重複するフラグメントの解決策は、新しい「フラグメント」インスタンスでフラグメント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のコード補完が常にあなたを救うわけではありません...時にはバグを自分で修正しなければならないこともあります!!

7
whyoz

これは私のために働いた

Android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();

0
Mudasar

試してみてください

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
0

ここで書かれたものを含め、私が何を試みたとしても、この答えを見るまでこの問題を解決できませんでした

https://stackoverflow.com/a/5907704/728312

0
Alpaslan