1

複数のアクティビティから、フラグメント間を切り替える 1 つのアクティビティに切り替えることにしましたが、アプリケーションがクラッシュします。

フラグメントを追加するアクティビティは次のとおりです

public class MainActivity extends SherlockFragmentActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MyFragment fragment = new MyFragment();

    fragment.setArguments(getIntent().getExtras());

    getSupportFragmentManager().beginTransaction()
    .add(R.id.fragment_container, fragment).commit();

}

これはオブザーバーであり、機能を備えたフラグメントですが、スペースを節約するために作成を表示するだけです

public class MyFragment  extends SherlockFragment implements Observer{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.my_fragment, container, false);
    }

ここに my_fragment.xml があります

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" >

... HAS SOME TEXT VIEWS HERE!
</RelativeLayout>

私が得るクラッシュは

02-15 16:17:41.079: E/AndroidRuntime(18668): FATAL EXCEPTION: main
02-15 16:17:41.079: E/AndroidRuntime(18668): java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MainActivity}: 
java.lang.IllegalArgumentException: 
No view found for id 0x7f040036 for fragment MyFragmentt{41a05910 #0 id=0x7f040036}

誰か助けてくれませんか?何が原因なのか本当にわかりません。メイン アクティビティ (この投稿の一番上のコード ブロック) で getSupportFragmentManager() をコメント アウトすると、フラグメントに何も描画されずに実行されます。

アップデート

どこに配置するかわからないframe_container

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
4

1 に答える 1

0

Fragmentsしたがって、アプリケーションで使用できる方法は 2 つあります。最初の方法は、次のように xml ファイルで Fragment を宣言する場合です。

<fragment android:name="com.example.news.ArticleReaderFragment"
        android:id="@+id/viewer"
        android:layout_weight="2"
        android:layout_width="0dp"
        android:layout_height="match_parent" />

2 番目の方法は、フラグメントをコンテナーに動的に追加/置換する場合です。ほとんどの例ではFrameLayout. これを行う方法は次のとおりです。

あなたのメインでFragmentActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myFragmentContainer);
}

そしてあなたのxmlではあなたmyFragmentContainer.xmlがあなたを配置する場所でfragment_containerあり、それは次のようになります:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/fragment_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

そして、あなたは次のFragmentsように追加して置き換えています:

    if (findViewById(R.id.fragment_container) != null) {

        if (savedInstanceState != null) {
            return;
        }

        // Create an instance of ExampleFragment
        HeadlinesFragment firstFragment = new HeadlinesFragment();
        // if there are any extras
        firstFragment.setArguments(getIntent().getExtras());

        // Add the fragment to the 'fragment_container' FrameLayout
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();
    }

表示したい次のフラグメントについては、次のようにします。

getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, secondFragment).commit();
于 2013-02-15T16:53:41.993 に答える