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>
R.id.myFragmentHolder
is inflated to the dialog's layout, and getFragmentManager()
returns the manager for the activity, so it can't find the view.
With nested fragments in API level 17 you can use getChildFragmentManager()
.
Just be sure that the reports_dialog layout containts a layout whose id myFragmentHolder like this one
<FrameLayout
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With