2

我的这个项目的目标是使用用户输入动态更新微调器。不幸的是,我正在输掉这场战斗。Logcat不断向我抛出资源ID错误,但是,我不明白为什么它只在按下按钮时抛出,如果那是问题所在,它不会在onCreate之后抛出吗?

Eclipse(通过 ctrl + 空格)告诉我指定包含 TextView 的布局的资源 ID。如果我只是处理一个数组和一个微调器,我什至不明白为什么我需要一个 textview。AndroidDevelopment 网站也这么说。我只是很困惑。所以,我的问题是,这个错误是什么意思,我做错了什么?

我相信这是有问题的行:

list = new ArrayAdapter<String>(this,R.layout.settings,items);

这是.java

    package com.example.thepicker;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;

public class Settings extends Activity implements OnClickListener{


    EditText getit;
    ImageButton giveit;
    Spinner thelist;
    ArrayList<String> items;
    ArrayAdapter<String> list;
    String transit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);

        items = new ArrayList<String>();
        list = new ArrayAdapter<String>(this,R.layout.settings,items);
        getit = (EditText) findViewById(R.id.getit);
        giveit = (ImageButton) findViewById(R.id.giveit);
        thelist = (Spinner) findViewById(R.id.thelist);


        thelist.setAdapter(list);
        giveit.setOnClickListener(this);
    }

@Override
    public void onClick(View v) {
        String transit = getit.getText().toString();
        items.add(transit);
        list.insert(transit, 0);
        list.notifyDataSetChanged();
    }
}

这是日志猫

03-11 01:39:25.682: E/Trace(1722): error opening trace file: No such file or directory (2)
03-11 01:39:26.452: D/libEGL(1722): loaded /system/lib/egl/libEGL_emulation.so
03-11 01:39:26.532: D/(1722): HostConnection::get() New Host Connection established 0x556a6180, tid 1722
03-11 01:39:26.602: D/libEGL(1722): loaded /system/lib/egl/libGLESv1_CM_emulation.so
03-11 01:39:26.623: D/libEGL(1722): loaded /system/lib/egl/libGLESv2_emulation.so
03-11 01:39:26.761: W/EGL_emulation(1722): eglSurfaceAttrib not implemented
03-11 01:39:26.772: D/OpenGLRenderer(1722): Enabling debug mode 0
03-11 01:39:30.483: W/EGL_emulation(1722): eglSurfaceAttrib not implemented
03-11 01:39:36.412: E/ArrayAdapter(1722): You must supply a resource ID for a TextView
03-11 01:39:36.412: D/AndroidRuntime(1722): Shutting down VM
03-11 01:39:36.423: W/dalvikvm(1722): threadid=1: thread exiting with uncaught exception (group=0x2bd39930)
03-11 01:39:36.562: E/AndroidRuntime(1722): FATAL EXCEPTION: main
03-11 01:39:36.562: E/AndroidRuntime(1722): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.Spinner.onMeasure(Spinner.java:439)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.View.measure(View.java:15513)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.View.measure(View.java:15513)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.View.measure(View.java:15513)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.View.measure(View.java:15513)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.View.measure(View.java:15513)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.Choreographer.doFrame(Choreographer.java:532)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.os.Handler.handleCallback(Handler.java:725)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.os.Looper.loop(Looper.java:137)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.app.ActivityThread.main(ActivityThread.java:5039)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at java.lang.reflect.Method.invokeNative(Native Method)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at java.lang.reflect.Method.invoke(Method.java:511)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-11 01:39:36.562: E/AndroidRuntime(1722):     at dalvik.system.NativeStart.main(Native Method)
03-11 01:39:36.562: E/AndroidRuntime(1722): Caused by: java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
03-11 01:39:36.562: E/AndroidRuntime(1722):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)
03-11 01:39:36.562: E/AndroidRuntime(1722):     ... 35 more
03-11 01:39:36.682: D/dalvikvm(1722): GC_CONCURRENT freed 188K, 4% free 6367K/6596K, paused 90ms+4ms, total 255ms
03-11 01:39:40.702: I/Process(1722): Sending signal. PID: 1722 SIG: 9
03-11 01:39:41.192: E/Trace(1747): error opening trace file: No such file or directory (2)
03-11 01:39:41.992: D/libEGL(1747): loaded /system/lib/egl/libEGL_emulation.so
03-11 01:39:42.092: D/(1747): HostConnection::get() New Host Connection established 0x556a6180, tid 1747
03-11 01:39:42.376: D/libEGL(1747): loaded /system/lib/egl/libGLESv1_CM_emulation.so
03-11 01:39:42.394: D/libEGL(1747): loaded /system/lib/egl/libGLESv2_emulation.so
03-11 01:39:42.674: W/EGL_emulation(1747): eglSurfaceAttrib not implemented
03-11 01:39:43.465: D/OpenGLRenderer(1747): Enabling debug mode 0
4

2 回答 2

5

我怀疑问题出在:

list = new ArrayAdapter<String>(this,R.layout.settings,items);

请尝试替换R.layout.settingsandroid.R.layout.simple_spinner_item

第二个参数是一个资源标识符,它应该指向TextViewwith id="@android/text1"(这是 Android 所期望的)

android.R.layout.simple_spinner_item对应于TextView位于 SDK 文件夹中的预定义布局(尝试查看安装 SDK 的文件夹:<SDK_FOLDER>/platforms/<select_any_platform_by_api_level>/data/res/layout/simple_spinner_item.xml,有一些非常不错的预定义布局,应该可以帮助您理解逻辑)

于 2013-03-11T02:03:33.830 回答
2

由于 ArrayAdapter 需要一个 TextView,正如异常所说,您有两个选择:

  1. 更改R.layout.settingsandroid.R.layout.simple_spinner_item

  2. 创建您自己的适配器子类,它会扩展您的自定义布局。

于 2013-03-11T02:08:02.707 回答