android - 无法实例化 appComponentFactory
问题描述
我正在 Android Studio 中开发一个 Android 应用程序,我正在努力让我的新片段显示。在 logcat 中,我看到一个错误,但我不确定它的含义,也无法在其他任何地方找到此问题的答案。我不确定在尝试设置此片段时是否犯了其他错误。
我尝试仅以编程方式添加片段,但在 YouTube 上找到了将片段添加到 XML 的其他示例,所以我也尝试过,但它也没有工作。几天来我一直在努力解决这个问题,所以任何帮助都将不胜感激。
我尝试使用 fragmentTransaction.add 和 fragmentTransaction.replace 开始新片段,没有区别。
这是主要课程
public class Dashboard extends AppCompatActivity {
Button menuButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
menuButton = (Button) findViewById(R.id.menu_button);
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startClassMenu();
}
});
}
public void startClassMenu(){
Fragment classMenuFragment = new ClassMenuFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.class_menu_fragment_place, classMenuFragment);
fragmentTransaction.commit();
}
}
这是主类xml
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<Button
android:id="@+id/menu_button"
android:layout_width="40dp"
android:layout_height="34dp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="21dp"
android:layout_marginLeft="21dp"
android:layout_marginTop="82dp"
android:background="@drawable/icon_blue_menu" />
<Button
android:id="@+id/home_button"
android:layout_width="40dp"
android:layout_height="38dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="6dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/home_icon" />
<Button
android:id="@+id/settings_button"
android:layout_width="37dp"
android:layout_height="33dp"
android:layout_alignBottom="@+id/menu_button"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginEnd="100dp"
android:layout_marginRight="100dp"
android:layout_marginBottom="72dp"
android:background="@drawable/icon_settings" />
<fragment
android:id="@+id/class_menu_fragment_place"
android:name="teamingenium.ingeniummobileapplication.fragments.ClassMenuFragment"
android:layout_width="177dp"
android:layout_height="187dp"
android:layout_alignEnd="@+id/menu_button"
android:layout_alignParentTop="true"
android:layout_marginTop="135dp"
android:layout_marginEnd="-127dp" />
这是片段Java类
public class ClassMenuFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_class_menu, container, false);
return view;
}
}
这是片段xml类
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.ClassMenuFragment"
android:id="@+id/fragment_class_menu">
<TextView
android:id="@+id/fragment_class_menu_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:text="Fragment Started" />
</FrameLayout>
这是来自 logcat 的错误
2018-12-29 20:09:48.405 1925-1925/system_process E/LoadedApk: Unable to instantiate appComponentFactory
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/system/priv-app/GoogleSdkSetup/lib/x86, /system/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.LoadedApk.createAppFactory(LoadedApk.java:226)
at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:338)
at android.app.ActivityThread.handleDispatchPackageBroadcast(ActivityThread.java:5388)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1733)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at com.android.server.SystemServer.run(SystemServer.java:454)
at com.android.server.SystemServer.main(SystemServer.java:294)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:838)
解决方案
参考这个链接片段;</p>
当您<fragment
在布局 xml 中使用时,您无需调用startClassMenu()
,只需删除该startClassMenu()
方法并重试即可。
尝试其他两种方法:
1、尽量使用android.app.Fragment
and android.app.FragmentManager
andandroid.app.Activity
而不是使用支持库。
2、尝试-keep public class * extends android.support.v4.**
在你的proguard-rules.pro
文件中添加
推荐阅读
- php - 将数组计数传递给变量
- java - KeyListener 在 JFrame 中随机工作
- python - 链表 Python
- sql - POST到数据库表的第一行?
- python - jupyter抛出错误:socket.gaierror:[Errno -2]名称或服务未知
- javascript - 将分隔线添加到按字母顺序排列的列表
- phpmailer - 邮件程序错误:SMTP 错误:无法验证。邮件程序错误:SMTP 错误:无法验证
- php - PHP preg_replace 在替换中重用编辑匹配
- node.js - Angular6从文件夹中获取所有文件名
- c# - c# async 等待按钮单击