【发布时间】:2020-04-20 18:49:56
【问题描述】:
在制作我的应用程序时,我意识到我使用了片段类而不是活动,但我没有重新启动,而是创建了一个新的 XML 布局文件并将其放入片段组件中。现在,当我在该布局上调用 setContentView 时,我的应用程序崩溃了,有没有办法我仍然可以使用这个片段类,还是需要使用 Activity 类重新启动?
这是 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.redacted.redacted.ui.pSelect.pSelect"
tools:layout="@layout/p_select"
/>
</LinearLayout>
感谢任何帮助。
p_select:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res /android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBackground">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Selection Page"
android:layout_margin="10dp"
android:textColor="#FFFFFF"
android:textSize="22dp"
android:textStyle="bold"
android:id="@+id/title"/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:id="@+id/select_RV"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/select_RV">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="id 1"
android:onClick="button1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="id 2"
android:onClick="button2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="id 3"
android:onClick="button3"/>
</LinearLayout>
</RelativeLayout>
这是错误信息:
E/AndroidRuntime: 致命异常: main 进程:com.redacted.pnews,PID:10863 java.lang.IllegalStateException:无法执行 android:onClick 的方法 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 引起:android.view.InflateException:com.redacted.pnews:layout/p_fragment 中的二进制 XML 文件第 8 行:com.redacted.pnews:layout/p_fragment 中的二进制 XML 文件第 8 行:膨胀类片段时出错 引起:android.view.InflateException:com.redacted.pnews:layout/p_fragment 中的二进制 XML 文件第 8 行:膨胀类片段时出错 原因:java.lang.IllegalArgumentException:二进制 XML 文件第 8 行:必须指定唯一的 android:id、android:tag 或具有 com.redacted.pnews.ui.pSelect.pSelect 的 id 的父级 在 androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3717) 在 androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:120) 在 androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:405) 在 androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:387) 在 android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:682) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:534) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:481) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.redacted.pnews.MainActivity.backBTN(MainActivity.java:91) 在 java.lang.reflect.Method.invoke(本机方法) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 在 android.view.View.performClick(View.java:7125) 在 android.view.View.performClickInternal(View.java:7102) 在 android.view.View.access$3500(View.java:801) 在 android.view.View$PerformClick.run(View.java:27336) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7356) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
出于个人原因,我宁愿不发布课程代码
在MainActivity类的onclick监听器中调用onCreateView,fragment类的主要用途是在p_select中填写recyclerview,所以我没有fragment类代码影响这个错误。
【问题讨论】:
-
你能发布@layout/p_select这个布局代码吗?
-
什么错误应该是准确的,你为此做了什么?
-
发布课程代码和 logcat 错误屏幕
-
请发布您的活动代码和片段路径。是的,它应该工作
-
我添加了新信息