Android的ListView的麻烦 [英] Android listview trouble

查看:193
本文介绍了Android的ListView的麻烦的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在尝试运行它实现一个ListView一个Android活动的相关问题,与20个元素填充它,并将其显示:在推出活动崩溃

下面是相关LogCat中的错误:

 您必须提供的资源ID为一个TextView
致命异常:主要
java.lang.IllegalStateException:ArrayAdapter需要的资源ID是一个TextView
在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
在android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
在android.widget.AbsListView.obtainView(AbsListView.java:2177)
在android.widget.ListView.measureHeightOfChildren(ListView.java:1247)
在android.widget.ListView.onMeasure(ListView.java:15848)
在android.widget.RelativeLayout.measureChild(RelativeLayout.java:698)
在android.widget.RelativeLayout.onMeasure(ListView.java:1159)
在android.view.View.measure(View.java:15848)
在android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
在android.app.ActivityThread.main(ActivityThread.java:5013)
java.lang.ClassCastException:引起android.widget.ListView不能转换为android.widget.TextView。
在android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:382)

ThirdActivity.java

 包com.example.logger;进口android.os.Bundle;
进口android.app.Activity;
进口android.app.ListActivity;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.ListView;公共类ThirdActivity扩展ListActivity实现OnClickListener {    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_third);
        最终的ListView列表视图=(ListView控件)findViewById(android.R.id.list);
        的String []值=新的String [] {一,二,三,四有,五个一,六个一,七,八,九,十大
                十一,十二,十三,十四,十五,十六,十七,十八,古诗十九首,
                二十};
        ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,R.layout.activity_third,android.R.id.list,价值观);
        setListAdapter(适配器);
    }        @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气菜单;如果是present这增加了项目操作栏。
        。getMenuInflater()膨胀(R.menu.third,菜单);
        返回true;        }        公共无效attachButton()
        {
            findViewById(R.id.add).setOnClickListener(本);        }        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根        }
}

结束的.java

和布局:

Activity_third.xml

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    工具:上下文=ThirdActivity。>   <按钮
       机器人:ID =@ + ID /加
       机器人:layout_width =match_parent
       机器人:layout_height =WRAP_CONTENT
       机器人:layout_alignParentTop =真
       机器人:文字=@字符串/加
       />   < ListView控件
       机器人:ID =@机器人:ID /列表
       机器人:layout_width =match_parent
       机器人:layout_below =@ + ID /加
       机器人:layout_height =WRAP_CONTENT          >< /&的ListView GT;< / RelativeLayout的>

结束的.xml

你能告诉我什么,我需要改变,以得到它的基础上,LogCat中错误日志的工作?

非常感谢你的帮助。

此致

毛罗。


解决方案

  

ArrayAdapter 要求的资源ID是一个的TextView


这只是意味着,你必须提供一个的TextView 的布局作为参数。适配器将这个的TextView 绑定到您的数据。但是,你正在传递你的布局与的ListView 在里面。

所以更改此:

  ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,R.layout.activity_third,android.R.id.list,价值观);

这样:

  ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,价值观);

I'm having problems trying to run an Android activity which implements a ListView, fills it with 20 elements and displays it: the activity crashes upon launch.

Here are the relevant LogCat errors:

You must supply a resource ID for a TextView
FATAL EXCEPTION: main
java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
at android.widget.AbsListView.obtainView(AbsListView.java:2177)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1247)
at android.widget.ListView.onMeasure(ListView.java:15848)
at android.widget.RelativeLayout.measureChild(RelativeLayout.java:698)
at android.widget.RelativeLayout.onMeasure(ListView.java:1159)
at android.view.View.measure(View.java:15848)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.app.ActivityThread.main(ActivityThread.java:5013)
Caused by: java.lang.ClassCastException: android.widget.ListView cannot be cast to android.widget.TextView.
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:382)

ThirdActivity.java

package com.example.logger;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class ThirdActivity extends ListActivity implements OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        final ListView listview = (ListView) findViewById(android.R.id.list);
        String[] values = new String[] {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", 
                "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
                "Twenty"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_third, android.R.id.list, values);
        setListAdapter(adapter);


    }

        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.third, menu);
        return true;

        }

        public void attachButton()
        {
            findViewById(R.id.add).setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
}

End .java

And the layout:

Activity_third.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ThirdActivity" >

   <Button
       android:id="@+id/add"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:text="@string/add"
       />

   <ListView 
       android:id="@android:id/list"
       android:layout_width="match_parent"
       android:layout_below="@+id/add"
       android:layout_height="wrap_content"

          ></ListView>

</RelativeLayout>

End .xml

Could you please tell me what I need to change to get it to work based on the LogCat error logs?

Thank you very much for your help.

Yours sincerely,

Mauro.

解决方案

ArrayAdapter requires the resource ID to be a TextView

This just means, that you have to supply a layout with a TextView as an argument. The Adapter will bind this TextView to your data. But you are currently passing in your layout with your ListView in it.

So change this:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_third, android.R.id.list, values);

to this:

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

这篇关于Android的ListView的麻烦的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆