gpt4 book ai didi

android - fragment 对话框中的 fragment 膨胀引发错误 "Fragment did not create a view"

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:59 25 4
gpt4 key购买 nike

用户单击一个按钮,该按钮会弹出一个 fragment 对话框,该对话框会像这样扩充 fragment :

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

View view = getActivity().getLayoutInflater().inflate(
R.layout.monday_fragment, null);
builder.setView(view).setTitle("Homework Due Monday")
.setNegativeButton("Dismiss", null);

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

这是指定布局的 xml (monday_fragment.xml),其中引用了要扩充的 fragment :

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
>

<fragment
android:id="@+id/monday_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.bernard.beaconportal.activities.schedule.daydialogfragments.MondayFragment"
android:layout_centerHorizontal="true"/>

</RelativeLayout>

fragment 对话框中的 fragment 然后在其 OnCreateView 中扩充自己的布局:

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

swipe = inflater.inflate(R.layout.day_homework_fragment, container,
false);

lView = (ListView) swipe.findViewById(R.id.listView1);

progress = (ProgressBar) swipe.findViewById(R.id.progress);

lView.setVisibility(View.GONE);

return swipe;

}

这是在 fragment 中膨胀的“day_homework_fragment.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="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:background="@color/light_background">

<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center" />

<ListView
android:id="@+id/listView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="#ffffff"
android:divider="@null"
android:dividerHeight="0dp"
>
</ListView>

<TextView
android:id="@+id/emptyView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="As of now, no homework due this day"
android:padding="30dp"
android:textSize="16sp"/>

</LinearLayout>

这是它抛出的错误日志,我已经尝试过这两个 post还有这个post并且都没有解决问题。

  10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: FATAL EXCEPTION: main
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: Process: com.bernard.beaconportal.activities, PID: 786
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: android.view.InflateException: Binary XML file line #10: Error inflating class fragment
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:668)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(<Xposed>)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.bernard.beaconportal.activities.schedule.view.MondayView.showDialog(MondayView.java:232)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.bernard.beaconportal.activities.schedule.view.MondayView$1.onClick(MondayView.java:174)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.View.performClick(View.java:4780)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:19867)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5338)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:917)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: Caused by: java.lang.IllegalStateException: Fragment com.bernard.beaconportal.activities.schedule.daydialogfragments.MondayFragment did not create a view.
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2273)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:111)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:278)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v4.app.BaseFragmentActivityDonut.onCreateView(BaseFragmentActivityDonut.java:44)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:78)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateView(AppCompatDelegateImplV7.java:842)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateView(AppCompatDelegateImplV11.java:34)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:830)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:668) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(<Xposed>) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.bernard.beaconportal.activities.schedule.view.MondayView.showDialog(MondayView.java:232) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.bernard.beaconportal.activities.schedule.view.MondayView$1.onClick(MondayView.java:174) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.View.performClick(View.java:4780) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:19867) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5338) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:917) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
10-11 01:50:40.657 786-786/com.bernard.beaconportal.activities E/AndroidRuntime: at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115) 

编辑:我刚刚意识到这只是在我从 eclipse 转移到 Android Studio 之后才开始发生的。也许这与它有关?可能所有 fragment 引用都搞砸了?

最佳答案

您不能将 fragment 放入标准的 AlertDialog 中。您必须创建一个 DialogFragment 实现来将 fragment 添加到您的对话框中。原因很简单,因为标准 fragment 会尝试将自己附加到相应 Activity 的根窗口,而当 AlertDialog 在根窗口上有一个单独的窗口时,情况就不是这样了。 AlertDialog 不能包含 DialogFragment 甚至 Fragment。尝试将 AlertDialog 代码更改为 DialogFragment 实现。

关于android - fragment 对话框中的 fragment 膨胀引发错误 "Fragment did not create a view",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33062082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com