问题描述
我有一个自定义的DialogFragment
,它包含一个布局,一些UI元素和一个Fragmentholder布局.我需要做的是将Content片段充气到holder布局中,并在其中进行导航.单击添加的片段内的按钮时,视图将导航到另一个视图.该片段将被同一持有人中的另一个片段替换,即contentFragment1
将显示一些数据,并且在单击预览按钮时,会将contentFragment1
替换为contentFragment2
.我在某处读到,您无法用另一个替换替换为硬编码为xml
的片段.因此,我试图将contentFragment1
从对话框片段的onActivityCreated()
添加到viewholder
.但是我收到一个错误,找不到由R.id.fragmentHolder
指向的资源.可能是什么原因?
这是我的DialogFragment
代码:
public class MyDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog customDialog = new Dialog(getActivity());
customDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
customDialog.setContentView(R.layout.reports_dialog);
return customDialog;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
android.app.FragmentTransaction fragmentTransaction =getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.myFragmentHolder, new ReportsListFragment());
fragmentTransaction.commit();
super.onActivityCreated(savedInstanceState);
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="400dp"
android:background="@android:color/transparent" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="This is my header text view for the Dialog"
android:textSize="18sp" />
<RelativeLayout
android:id="@+id/myFragmentHolder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/headerlayout" >
</RelativeLayout>
尝试了很多之后,我得出的结论是onCreateDialog()
没有视图,它只是在调用setView()
时设置了一个视图.
这就是为什么在dialogfragment的布局中添加动态(framelayout标签)或静态片段(fragment标签)时不会出现父视图或重复ID 错误的原因./p>
要实现上述目标,应将onCreateView
与可动态膨胀的framelayout标签一起使用.然后将标题和警报按钮添加到布局中.
I am having a custom DialogFragment
which contains a layout, some UI elements, and a Fragment holder layout. What I need to do is inflate a Content fragment into the holder layout and provide a navigation inside that. On clicking a button inside the added fragment the view will navigate to another view. The fragment will be replaced by another one in the same holder i.e. the contentFragment1
will show some data and on clicking a preview button there will replace contentFragment1
with contentFragment2
.I read somewhere that you cannot replace a fragment hardcoded to the xml
with another one.So I am trying to add the contentFragment1
to the viewholder
from the onActivityCreated()
of the dialog fragment. But I am getting an error that the resource pointed by R.id.fragmentHolder
not found. What could be the possible reason?
Here is my code for the DialogFragment
:
public class MyDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog customDialog = new Dialog(getActivity());
customDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
customDialog.setContentView(R.layout.reports_dialog);
return customDialog;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
android.app.FragmentTransaction fragmentTransaction =getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.myFragmentHolder, new ReportsListFragment());
fragmentTransaction.commit();
super.onActivityCreated(savedInstanceState);
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="400dp"
android:background="@android:color/transparent" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="This is my header text view for the Dialog"
android:textSize="18sp" />
<RelativeLayout
android:id="@+id/myFragmentHolder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/headerlayout" >
</RelativeLayout>
After trying a lot, I came to a conclusion that onCreateDialog()
doesn't have a view, it just sets a view on calling setView()
.
That is why on adding dynamic(framelayout tag) or static fragment(fragment tag) in the layout of the dialogfragment gives no parent view or duplicate id error.
To achieve the above, one should use onCreateView
with a framelayout tag which can be inflated dynamically. Title and alert buttons are then added to the layout.
这篇关于如何在FragmentFragment的布局中添加片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!