15

ダイアログにフラグメントを追加したいと思います (DialogFragment または通常のダイアログのいずれか)。それ、どうやったら出来るの?

ここに私のDialogFragmentがあります:

public class MyDialogFragment extends DialogFragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyDialogFragment2 dialog = new MyDialogFragment2();
        View v = inflater.inflate(R.layout.news_articles, container, false);
        getActivity().getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, dialog).commit();
        return v;
    }

}

news_article.xml は次のとおりです。

<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" />

私の主な活動は次のとおりです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            MyDialogFragment dialog = new MyDialogFragment();
            dialog.show(getSupportFragmentManager(), "asdf");
        }
    });
}

しかし、試してみると、次のようになります。

No view found for id 0x7f070002 for fragment MyDialogFragment2

アクティビティの FragmentManager は追加する必要があるものではないためだと思いますが、DialogFragment の FragmentManager が見つかりません。どこにありますか?

4

2 に答える 2

12

ダイアログのレイアウト - R.layout.view_with_plus

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.util.me.TestActivity"
    >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Details"/>
    <fragment
        android:layout_toRightOf="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/email"
        class="com.util.me.test.PlusOneFragment"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

ダイアログの表示方法

public void showDialog(View vIew){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    View view = this.getLayoutInflater().inflate(R.layout.view_with_plus, null);
    builder.setView(view)
            .setPositiveButton("OK", null)
            .setNegativeButton("Cancel", null);

    AlertDialog dialog = builder.create();
    dialog.show();
}

class="com.util.me.test.PlusOneFragment" のフラグメントは、Android Studio によって生成された単なる PlusOneFragment です。

于 2014-06-06T14:25:09.470 に答える
12

答え(@Luksprogのおかげ)は、getActivity()の代わりにgetChildFragmentManagerを使用しています。getSupportFragmentManager

ここで説明されているように、support-v4 jar をアップグレードする必要があったため、利用できませんでした: android.support.v4.app.Fragment: undefined method getChildFragmentManager()

于 2013-08-18T11:15:53.697 に答える