二进制 XML 文件第 20 行:膨胀 class 片段时出错

Binary XML file line #20: Error inflating class fragment

我想向 LinearLayout 添加一个对象,但它抛出错误 错误行:在 me.solo_team.futureleader.ui.news.NewsFragment.onCreateView(NewsFragment.java:62) ( addElement(uris.get(i),names.get(i));)

新闻片段

    private LayoutInflater inflater;
    private ViewGroup container;
    private LinearLayout nw;
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {

        View root = inflater.inflate(R.layout.fragment_news, container, false);
        nw = root.findViewById(R.id.news_list);
        this.inflater = inflater;
        this.container = container;
        List<String> uris = Arrays.asList(
           // links...
);
        List<String> names = Arrays.asList(
             // names                                 
);
        for(int i =0;i<9;i++){
            addElement(uris.get(i),names.get(i));
        }
        return root;
    }

    private void addElement(String uri,String name){
        FrameLayout row = (FrameLayout) inflater.inflate(R.layout.news_news, container,false);
        ConstraintLayout cn = row.findViewById(R.id.news_obj);
        Picasso.get().load(uri).into((ImageView)cn.getChildAt(1));
        ((TextView)cn.getChildAt(2)).setText(name);
        nw.addView(row);
    }

fragment_news:

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.news.NewsFragment">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/news_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent">

        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

mews_news.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/news_obj"
    android:layout_width="match_parent"
    android:layout_height="180dp"
    android:layout_margin="15dp"
    android:orientation="vertical"
    app:contentPadding="10dp">


    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/gray_gradient_with_corners"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <ImageView
        android:id="@+id/news_obj_image"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/gray_gradient_with_corners"
        android:src="@drawable/gray_gradient"
        app:layout_constraintBottom_toTopOf="@id/news_obj_name"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="ContentDescription" />

    <TextView
        android:id="@+id/news_obj_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginBottom="10dp"
        android:autoSizeMaxTextSize="20sp"
        android:autoSizeMinTextSize="12sp"
        android:autoSizeStepGranularity="2sp"
        android:autoSizeTextType="uniform"
        android:text="news text"
        android:textColor="@color/text_color1"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@id/news_obj"
        app:layout_constraintLeft_toLeftOf="@id/news_obj" />
</androidx.constraintlayout.widget.ConstraintLayout>

错误:

E/AndroidRuntime:致命异常:main 进程:me.solo_team.futureleader,PID:23516 java.lang.RuntimeException: 无法启动 activity ComponentInfo{me.solo_team.futureleader/me.solo_team.futureleader.MainActivity}: android.view.InflateException: 二进制 XML 文件行 # 20:二进制 XML 文件第 20 行:膨胀 class 片段时出错 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class 片段 Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class 片段 原因:java.lang.ArrayIndexOutOfBoundsException:长度=8;索引=8 在 java.util.Arrays$ArrayList.get(Arrays.java:3769) 在 me.solo_team.futureleader.ui.news.NewsFragment.onCreateView(NewsFragment.java:62) 在 androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) 在 androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) 在 androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 在 androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 在 androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 在 androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:3065) 在 androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2988) 在 androidx.fragment.app.FragmentStateManager.ensureInflatedView(FragmentStateManager.java:392) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:281) 在 androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:140) 在 androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135) 在 androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319) 在 androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 在 android.view.LayoutInflater.rInflate 儿童 (LayoutInflater.java:824) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:706) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195) 在 me.solo_team.futureleader.MainActivity.onCreate(MainActivity.java:24) 在 android.app.Activity.performCreate(Activity.java:7136) 在 android.app.Activity.performCreate(Activity.java:7127) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) E/AndroidRuntime: 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

原因:java.lang.ArrayIndexOutOfBoundsException:长度=8;在 java.util.Arrays$ArrayList.get(Arrays.java:3769) 在 me.solo_team.futureleader.ui.news.NewsFragment.onCreateView(NewsFragment.java:62) 时索引=8 这是崩溃的真正原因^

在我看来你的

for(int i =0;i<9;i++){
            addElement(uris.get(i),names.get(i));
        }

尝试获取超出范围的项目。 它应该是 i<8,因为虽然您的列表似乎有 8 个条目(例外情况下长度 = 8),但它们从 0 开始(总共 8 个条目为 0,1,2...6,7),所以i=8 和 i=9 将越界。

您还可以设置 i

这种类型的崩溃通常具有误导性,因为您只在 LogCat 中看到最近(或最不最近)的异常。

每当我遇到导致应用程序崩溃的错误时,我都会故意忽略第一次崩溃并重复之前的行为以触发第二次崩溃。然后突然,LogCat 以完全不同的方式报告异常,通常指向错误的正确来源。是的,这就是疯狂的定义,因为你重复同样的行为,却得到不同的结果。但这是Android。精神错乱。