二进制 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。精神错乱。
我想向 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。精神错乱。