I am trying to create a DialogFragment with a ListFragment element nested inside it. I use the nested fragment that was added in 4.2.2 I use it in the support library, so my api version does not matter (for recording, my os version is also 4.2.2).
The list I'm trying to add only shows the lines right now, because I'm trying to add it, after I do this, the list will have images, etc. Therefore, please, any ideas of transferring the list of lines to the dialog is not suitable for me, my list will be more complicated .. In addition, I am trying to reuse this fragment for tablet mode. The list should always be displayed in this mode. Therefore, reuse is important.
My problem is that when I try to add a listfragment to the FrameLayout of the dialog box, it cannot be found:
java.lang.IllegalStateException: The fragment does not have a view on android.support.v4.app.Fragment $ 1.findViewById (Fragment.java:1425) in android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:901) in android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1088) in android.support.v4.app.BackStackRecord.run (BackStackRecord.java:682) in android.support.v4.app.FragmentManagerImpl.execPendingActions ( FragmentManager.java:1444) in the android.support.v4.app.Fragment.performStart file (Fragment.java:1481) in android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:941) in android.support. v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1088) in android.support.v4.app.BackStackRecord.run (BackStackRecord.java:682) in android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1444) in android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.java:429) on android.os.Handler.handleCallback (Handler.java:725) on android.os.Handler. dispatchMessage (Handler.java:92) at android.os.Looper.loop (Looper.java:137) in android.app.ActivityThread.main (ActivityThread.java:5041) in java.lang.reflect.Method.invokeNative (native method) in java.lang.reflect.Method.invoke (Method.java∗11) in com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) on com.android.internal.os.ZygoteInit .main (ZygoteInit.java∗60) at dalvik.system.NativeStart.main (native method)92) at android.os.Looper.loop (Looper.java:137) in android.app.ActivityThread.main (ActivityThread.java:5041) in java.lang.reflect.Method.invokeNative (native method) in java.lang .reflect.Method.invoke (Method.java∗11) in com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) on com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 560) at dalvik.system.NativeStart.main (native method)92) at android.os.Looper.loop (Looper.java:137) in android.app.ActivityThread.main (ActivityThread.java:5041) in java.lang.reflect.Method.invokeNative (native method) in java.lang .reflect.Method.invoke (Method.java∗11) in com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) on com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 560) at dalvik.system.NativeStart.main (native method)
:
, ,
SupportMapFragment.
ListFragment SupportMapFragment, .
, DialogFragment SupportMapFragment - .
, ListFragment DialogFragment, .
, :
FragmentActivity → SupportMapFragment → DialogFragment → ListFragment.
SupportMapFragment :
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
SherlockDialogFragment prev =(SherlockDialogFragment)getChildFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
SherlockDialogFragment newFragment = new CategoriesDialogFragment();
newFragment.show(ft, "dialog");
, : -)
DialogFragment:
public class CategoriesDialogFragment extends SherlockDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = getSherlockActivity().getLayoutInflater();
View dialogView = inflater.inflate(R.layout.fragment_categories_dialog_fragment, null, false);
Dialog diag = new AlertDialog.Builder(getSherlockActivity())
.setTitle("Hello")
.setCancelable(false)
.setView(dialogView)
.setPositiveButton("ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}
)
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}
)
.create();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
SherlockDialogFragment prev = (SherlockDialogFragment)getChildFragmentManager().findFragmentByTag("fragment_list_categories");
if (prev != null) {
transaction.remove(prev);
}
SherlockListFragment listCategoriesFragment = new CategoriesListFragment();
transaction.add(R.id.fragment_list_categories, listCategoriesFragment, "fragment_list_categories").commit();
return diag;
}
}
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="sjrdflksjlksjfkldsjflkjsdflksd"/>
<FrameLayout
android:id="@+id/fragment_list_categories"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
ListFragment :
public class CategoriesListFragment extends SherlockListFragment {
public static final String[] TITLES =
{
"Henry IV (1)",
"Henry V",
"Henry VIII",
"Richard II",
"Richard III",
"Merchant of Venice",
"Othello",
"King Lear"
};
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.w("ListFragment", "insideeeeeeeeeeeeeeeeeeeee");
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getSherlockActivity(),
android.R.layout.simple_list_item_1, TITLES));
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
}
}