1

Android互換パッケージを使用して、フラグメントを使用する下位互換性のあるアプリを作成しようとしています。ただし、Androidv2.2エミュレーターで実行するとクラッシュします。Xoom(v3.2)ではクラッシュしません。main.xmlのフラグメントタグが原因である可能性があります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <fragment android:name="com.companyname.appname.MainMenuFragment"
        android:id="@+id/mainMenu"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="fill_parent" />
</LinearLayout>

FragmentActivityは次のとおりです。

package com.companyname.appname;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class AppName extends FragmentActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

そして、ここにフラグメントがあります:

package com.companyname.appname;

import android.support.v4.app.Fragment;

public class MainMenuFragment extends Fragment {

}

何か案は?

ありがとう

編集:私はAPIレベル8(Android v2.2)をターゲットにしています

4

2 に答える 2

2

ありがとう、smith324とLeffelMania。エラーlogcatはこのエラーを示しました:08-03 22:03:22.946:ERROR / AndroidRuntime(938):原因:java.lang.IllegalStateException:フラグメントcom.companyname.appname.MainMenuFragmentはビューを作成しませんでした。そこで、MainMenuFragmentクラスのonCreateView()をオーバーライドして、Viewを返すようにしましたが、これは機能しました。v3.2ではクラッシュしなかったのは不思議です。

于 2011-09-22T18:59:27.840 に答える
1

UIをフラグメントにアタッチしたくない場合があります。たとえば、私のアプリには、アクションバーのアクションビューとして使用されるメニュー項目を担当するフラグメントがあります。この場合、を実装することはできませんonCreateView()

「UIを使用せずにフラグメントを追加する」セクションのAndroidフラグメントユーザーガイドで説明されているように、プログラムでフラグメントをアクティビティに追加する必要があります。

これが私のアクティビティで使用するコードです:

// Add the address bar fragment
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(addressBarFragment,"address_bar_fragment");
fragmentTransaction.commit();

注1:互換性ライブラリを使用しているため、getSupportFragmentManager()代わりに使用しています。注2:依存関係の注入にRoboguiceを使用しているため、この例ではnew Fragment()は呼び出されません。getFragmentManager()

于 2012-04-10T15:19:43.603 に答える