58

このリファレンスのコードを使用しています。

そのコードをプログラムに入れると、下の図に示すようなエラーが発生します。 ここに画像の説明を入力

エラーの理由はありますか? 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();
    }

例Fragments.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

5 に答える 5

167

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

于 2012-07-23T20:06:00.150 に答える
8

この質問には答えられているかもしれませんが、重複するフラグメントの解決策は、新しい「フラグメント」インスタンスを使用してフラグメント 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 のエラーを停止することができますが、それでも Fragments で問題が発生します。Google ドキュメントはすべてを示しているわけではありません。また、Eclipse のコード補完が常に役立つとは限りません。バグを自分で修正しなければならない場合もあります。

于 2013-05-08T22:34:49.273 に答える