有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ListView在安卓活动中不工作,并引发textView缺少资源ID错误

我是安卓开发新手,尝试在我的简单应用程序中使用ListView。但它不起作用,而且会抛出错误

下面是显示消息活动的代码。java。我已经创建了一个字符串数组并手动输入值。我使用我们称之为自定义适配器的方法调用资源ID

package com.example.myfirstapp;
import 安卓.content.Intent;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.ListView;
import 安卓.widget.TextView;

import java.util.List;

public class DisplayMessageActivity extends AppCompatActivity {
String[] mobileArray={"A", "B"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        Intent intent=getIntent();
        String message=intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        TextView textView=(TextView) findViewById(R.id.textView);
        textView.setText(message);
        System.out.println("seq");
        ArrayAdapter adapter=new ArrayAdapter<String>(this, R.layout.activity_display_message, R.id.listView, mobileArray);
        System.out.println("seq2");
        ListView listView=(ListView) findViewById(R.id.listView);
        System.out.println("seq3");
        listView.setAdapter(adapter);
        System.out.println("seq44");
    }
}

活动显示消息的XML。xml位于我创建一个ListView的下方

<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:paddingBottom="@dimen/activity_vertical_margin"
    安卓:paddingLeft="@dimen/activity_horizontal_margin"
    安卓:paddingRight="@dimen/activity_horizontal_margin"
    安卓:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myfirstapp.DisplayMessageActivity">

    <TextView
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:text="New Text"
        安卓:id="@+id/textView"
        安卓:layout_alignParentTop="true"
        安卓:layout_centerHorizontal="true" />

    <ListView
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:id="@+id/listView"
         />
</RelativeLayout>

错误日志

09-06 15:00:43.859 3751-3751/? E/ArrayAdapter: You must supply a resource ID for a TextView
09-06 15:00:43.859 3751-3751/? D/AndroidRuntime: Shutting down VM
09-06 15:00:43.860 3751-3751/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.example.myfirstapp, PID: 3751
                                                 java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
                                                     at 安卓.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:393)
                                                     at 安卓.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
                                                     at 安卓.widget.AbsListView.obtainView(AbsListView.java:2346)
                                                     at 安卓.widget.ListView.measureHeightOfChildren(ListView.java:1280)
                                                     at 安卓.widget.ListView.onMeasure(ListView.java:1188)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
                                                     at 安卓.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                     at 安卓.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at 安卓.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                     at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                     at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                                                     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                     at com.安卓.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                                                     at 安卓.view.View.measure(View.java:18788)
                                                     at 安卓.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                                                     at 安卓.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                                                     at 安卓.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
                                                     at 安卓.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                     at 安卓.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                     at 安卓.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                     at 安卓.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                     at 安卓.view.Choreographer.doFrame(Choreographer.java:606)
                                                     at 安卓.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                     at 安卓.os.Handler.handleCallback(Handler.java:739)
                                                     at 安卓.os.Handler.dispatchMessage(Handler.java:95)
                                                     at 安卓.os.Looper.loop(Looper.java:148)
                                                     at 安卓.app.ActivityThread.main(ActivityThread.java:5417)
                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                  Caused by: java.lang.ClassCastException: 安卓.widget.ListView cannot be cast to 安卓.widget.TextView
                                                     at 安卓.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:389)
                                                     at 安卓.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
                                                     at 安卓.widget.AbsListView.obtainView(AbsListView.java:2346) 
                                                     at 安卓.widget.ListView.measureHeightOfChildren(ListView.java:1280) 
                                                     at 安卓.widget.ListView.onMeasure(ListView.java:1188) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
                                                     at 安卓.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                                                     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                                                     at 安卓.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                                                     at 安卓.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                                                     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                                                     at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                                                     at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                                                     at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                                                     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                                                     at com.安卓.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 
                                                     at 安卓.view.View.measure(View.java:18788) 
                                                     at 安卓.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 
                                                     at 安卓.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 
                                                     at 安卓.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 
                                                     at 安卓.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
                                                     at 安卓.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
                                                     at 安卓.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                                                     at 安卓.view.Choreographer.doCallbacks(Choreographer.java:670) 
                                                     at 安卓.view.Choreographer.doFrame(Choreographer.java:606) 
                                                     at 安卓.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                                                     at 安卓.os.Handler.handleCallback(Handler.java:739) 
                                                     at 安卓.os.Handler.dispatchMessage(Handler.java:95) 
                                                     at 安卓.os.Looper.loop(Looper.java:148) 
                                                     at 安卓.app.ActivityThread.main(ActivityThread.java:5417) 
                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

共 (3) 个答案

  1. # 1 楼答案

    As you are newbie, try android predefined layout.

    要做到这一点,您只需要像下面这样编辑适配器

    ArrayAdapter adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mobileArray);
    

    如果您对此解决方案有任何疑问,请告诉我

  2. # 2 楼答案

    像这样为lite视图行项目创建新布局

    列出项目类型1。xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list_item_type1_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/list_item_type1_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Text goes here" />
    
    </LinearLayout>
    

    然后像这样创建适配器类

    private class MyCustomAdapter extends BaseAdapter {
    
            private ArrayList<String> mData = new ArrayList<String>();
            private LayoutInflater mInflater;
    
            public MyCustomAdapter() {
                mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
    
            public void addItem(final String item) {
                mData.add(item);
                notifyDataSetChanged();
            }
    
            @Override
            public int getItemViewType(int position) {
              if(position < LIST_ITEM_TYPE_1_COUNT)
                  return LIST_ITEM_TYPE_1;
              else
                  return LIST_ITEM_TYPE_2;
            }
    
            @Override
            public int getViewTypeCount() {
                return LIST_ITEM_TYPE_COUNT;
            }
    
            @Override
            public int getCount() {
                return mData.size();
            }
    
            @Override
            public String getItem(int position) {
                return mData.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder = null;
                int type = getItemViewType(position);
                if (convertView == null) {
                    holder = new ViewHolder();
    
                            convertView = mInflater.inflate(R.layout.list_item_type1, null);
                            holder.textView = (TextView)convertView.findViewById(R.id.list_item_type1_text_view);
    
                holder.textView.setText(mData.get(position));
                return convertView;
            }
    
        }
    
        public static class ViewHolder {
            public TextView textView;
        }
    
    }
    

    check this listview demo

    然后将适配器设置到listview

  3. # 3 楼答案

    请仔细阅读stacktrace的内容:

    爪哇。lang.IllegalStateException:ArrayAdapter要求资源ID为TextView

    在代码中,您试图在此处传递listView,它应该是TextView的实例

    ArrayAdapter=新的ArrayAdapter(此,R.layout.activity\u display\u消息,R.id.listView,mobileArray)