在DialogFragment中显示自定义片段

时间:2013-08-28 10:18:54

标签: android android-layout android-fragments android-alertdialog

我有一个FragmentActivity,它有一个按钮,点击按钮我正在显示一个dailog

public class FragMainActivity extends FragmentActivity implements android.view.View.OnClickListener {
    Button shoBut;
    public String DailogTag="dialog";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        shoBut= (Button) findViewById(R.id.button1);
        shoBut.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        MyDialogFragment newFragment = MyDialogFragment.newInstance();
        FragmentManager fm ;
        fm=getSupportFragmentManager();
        newFragment.show(fm, DailogTag);
    }
}

我的对话框类

public  class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {     
        return new MyDialogFragment();
    }


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

        View inView= inflater.inflate(R.layout.dialog_layout, container, false);

        return inView;
    }
}

这是我的dialog_layout xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:paddingBottom="36dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="36dp" >

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:text="Hi, i am the dailog BOX...Boom"

    android:textAppearance="?android:textAppearanceMedium" />

</LinearLayout>

我正确地得到了dailog 但我有一个Fragment类,像这样的ExampleFragment

public  class ExampleFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         // Inflate the layout for this fragment
         return inflater.inflate(R.layout.frag_content, container, false);
     }
}

谁的布局

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:text="Fragment Conttent"

    android:textAppearance="?android:textAppearanceMedium" />

<RatingBar
    android:id="@+id/ratingBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

当我尝试将此片段放入我的dailog布局时,我的应用程序崩溃了。

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:text="You really want to read this text?"

    android:textAppearance="?android:textAppearanceMedium" />

    android:layout_width="match_parent" android:layout_height="match_parent">

   <fragment class="com.example.addfragment.ExampleFragment"
        android:id="@+id/example_fragment"
        android:layout_width="match_parent" android:layout_height="match_parent" />

</LinearLayout>

当我将它放在我的activity_main布局中时,它显示了片段,但是在dailogFragment中它不起作用。

我正在

  

08-28 15:44:09.969:E / AndroidRuntime(438):android.view.InflateException:二进制XML文件行#22:错误膨胀类片段

有人对此有任何建议吗?为什么片段不能包含在dailogFragment布局中?

为什么我们不能在daiologFragment中添加片段?

1 个答案:

答案 0 :(得分:2)

  

,为什么不能包含片段   dailogFragment布局?

因为通过膨胀包含它们的布局文件,无法将嵌套片段添加到父片段。以下是文档中的说明:

注意:当布局包含&lt;时,您不能将布局扩展为片段。片段&gt;。只有在动态添加到片段时才支持嵌套片段。

  

对此有何建议?

在代码中添加ExampleFragment:在对话框片段的onCreateView()方法中创建ExampleFragment的实例,并使用getChildFragmentManager()将其添加到{{1}的容器中}}