web-dev-qa-db-ja.com

androidのframelayoutにフラグメントをプログラムで追加する

静的要素と動的要素の両方を組み合わせたUIを構築しようとしています。このため、アクティビティをフラグメントに分割しました。すべてのアプリナビゲーションは、アクティビティ間を移動するのではなく、フラグメントを置き換えることによって行われます。

私のメインアクティビティレイアウトでは、FrameLayoutを使用しています。

_<FrameLayout
        Android:id="@+id/mainframe"
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"
        Android:layout_below="@id/topsection"
        Android:layout_above="@id/lowersection" />
_

そのように宣言されたフラグメントがあります:

_public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragmentlayout, container, false);
    }
}
_

次に、メインアクティビティ(FragmentActivityを拡張し、インポート_Android.support.v4.app.FragmentActivity_を使用)で、このフラグメントをフレームレイアウトにロードしようとしています。

_MyFragment myf = new MyFragment();

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.mainframe, myf);
transaction.commit();
_

私は他の多くの例からこれに従いましたが、transaction.add()コマンドでコンパイラエラーを受け取りました。

私が受け取っているエラーはThe method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, MyFragment)です。

どうしてこれなの? MyFragmentクラスはFragmentを拡張しているので、これでうまくいくと思いました。私は何を間違えていますか?

編集:私のメインアクティビティのインポートは次のとおりです。

_import org.joda.time.DateTime;
import Android.app.FragmentTransaction;
import Android.database.Cursor;
import Android.os.Bundle;
import Android.os.Handler;
import Android.support.v4.app.FragmentActivity;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.TextView;
import Android.widget.Toast;
_
21
Mike Baxter

インポートを確認してください。 _Android.support.v4.app.FragmentTransaction_の代わりに_Android.app.FragmentTransaction_を使用します。

さらに、必ず_Android.support.v4.app.Fragment_を使用し、getSupportFragmentManager()を呼び出してください。この呼び出し/インポートを見逃すのは簡単です。 FragmentManagerのヒントによるsaiful103aへのThx。

31
Steve Benett