首页 > 解决方案 > 二进制 XML 文件第 24 行:膨胀类 android.widget.Spinner 时出错

问题描述

我是 android 新手,制作了一个在 Xperia z2 和 Samsung j2 上运行良好的转换器应用程序,但是当我尝试在 Xperia z1 上测试它时它崩溃了。该应用程序根本没有启动。我浏览了很多帖子,但无法解决它给我这个错误的问题:

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.example.sreyash.uconverter/com.example.sreyash.uconverter
.MainActivity}: android.view.InflateException: Binary XML file line #24: 
Error inflating class android.widget.Spinner at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237)

android.view.LayoutInflater.createView (LayoutInflater.java:620)
com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView 
(PhoneLayoutInflater.java:56)
android.view.LayoutInflater.onCreateView (LayoutInflater.java:669)
android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:694)
android.view.LayoutInflater.rInflate (LayoutInflater.java:755)
android.view.LayoutInflater.inflate (LayoutInflater.java:492)
android.view.LayoutInflater.inflate (LayoutInflater.java:397)
android.view.LayoutInflater.inflate (LayoutInflater.java:353)
com.android.internal.policy.impl.PhoneWindow.setContentView 
(PhoneWindow.java:297)
android.app.Activity.setContentView (Activity.java:1929)
com.example.sreyash.uconverter.MainActivity.onCreate (MainActivity.java:33)
android.app.Activity.performCreate (Activity.java:5231)
android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087)
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2201)
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2286)
android.app.ActivityThread.access$800 (ActivityThread.java:144)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1246)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:212)
android.app.ActivityThread.main (ActivityThread.java:5135)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:877)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:693)
dalvik.system.NativeStart.main (NativeStart.java)

这是指向的代码错误:

 <android.support.constraint.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:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@drawable/converter_background"
  tools:context=".MainActivity">

    <ImageButton
    android:id="@+id/length"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:layout_marginBottom="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:onClick="onClick"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.549"
    android:background="@drawable/lengths_symbol" />

    <Spinner
    android:id="@+id/spinner"
    android:layout_width="150dp"
    android:layout_height="30dp"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:entries="@android:color/background_light"
    android:popupBackground="@color/colorPrimaryDark"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.949"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.110000014" />

这是主要活动;

public class MainActivity extends Activity implements 
AdapterView.OnItemSelectedListener{



int mode_flag;
ArrayAdapter<CharSequence> adapter1;
ArrayAdapter<CharSequence> adapter2;
Spinner spinner1;
Spinner spinner2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     spinner1=findViewById(R.id.spinner);
     spinner2=findViewById(R.id.spinner2);

    mode_flag=1;
    set_adapter(R.array.Length);
    Lenght.setBackgroundResource(R.drawable.lengths_symbol_clicked);
    Title.setText(R.string.Lenght_title);
    conversion_mode="Length";

    Clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(!input.isEmpty()) {
                input = input.substring(0, input.length() - 1);
                Log.d("back", ""+input);
                inputview.setText(input);
            }

            Conversion();
        }
    });
    Clear.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            return false;
        }
    });


}

   public void set_adapter(int source){
    adapter1=ArrayAdapter.createFromResource(this, 
   source,android.R.layout.simple_spinner_item);
    adapter2=ArrayAdapter.createFromResource(this, 
source,android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);

adapter2.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);

    spinner1.setAdapter(adapter1);
    spinner1.setOnItemSelectedListener(this);

    spinner2.setAdapter(adapter2);
    spinner2.setOnItemSelectedListener(this);

}

任何帮助将不胜感激

标签: android

解决方案


First Thing android:entries 属性用于将数据绑定到微调器,而不是用于设置颜色。

XML 方法

首先将国家数组创建到 String.xml 文件中

 <string-array name="country_names">
        <item>India</item>
        <item>United States</item>
        <item>Indonesia</item>
        <item>France</item>
        <item>Italy</item>
        <item>Singapore</item>
        <item>New Zealand</item>
    </string-array>

您应该将 android:entries="@android:color/background_light" 更改为 android:entries="@array/country_names"

JAVA代码方法

您可以将其创建到 Java 代码中

使用 Contry 创建 ArrayList 并使用 ArrayAdapter 使用 Spinner 绑定 Array。

    ArrayList<String> contryList=new ArrayList<String>();
    contryList.add("India");
    contryList.add("United States");
    contryList.add("Other");
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, contryList);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dataAdapter);

推荐阅读