Android - 尝试显示包含多列的列表时的例外情况

时间:2012-07-24 00:26:32

标签: android android-layout android-listview

我有一个列表,其中一列使用了适配器,并且有效。现在我试图把它分成两列,我得到例外。

我正在按照这个看起来最简单的教程:http://www.heikkitoivonen.net/blog/2009/02/15/multicolumn-listview-in-android/

我有一个Java活动,我声明如下:

public class SeeAllQuestionsActivity extends ListActivity

这里有一些代码:

@Override
public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
    FlurryAgent.onStartSession(this, "8CA5LTZ5M73EG8R35SXG");

    setContentView(R.layout.all_question_page);
...

这是all_question_page xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="3px"
        >

<include android:id="@+id/header"
         layout="@layout/header"
         android:layout_height="wrap_content"
         android:layout_width="fill_parent"/>    

<TextView
    android:id="@+id/loading_questions" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Some prompt text."
    android:textSize="10sp"
    />

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="@+id/label"
        android:textSize="20px" >        
    </ListView>
</LinearLayout>

顺便说一下,如果有人可以向我解释两个语法之间的差异,以引用列表ID,那就太棒了:

  android:id="@android:id/list"  
  android:id="@+id/list"  

仅供参考,这些都不适合我:)

这是questions_list.xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <TextView android:id="@+id/TRAIN_CELL"
         android:layout_width="50dip"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/FROM_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content" android:layout_weight="1"/>

     <TextView android:id="@+id/TO_CELL"
         android:layout_width="60dip"
         android:layout_height="wrap_content"  android:layout_weight="1"/>
</LinearLayout>

当我在模拟器上运行它时,它因运行时异常而崩溃,抱怨此行:setContentView(R.layout.all_question_page);,错误是:

 java.lang.RuntimeException: 
Your content must have a ListView whose id attribute is 'android.R.id.list'

请帮助,我很困难

谢谢!

1 个答案:

答案 0 :(得分:1)

差别似乎是前者是你需要使用的,以便使用ListActivity,如果你不打算使用ListActivity,后者就是你要使用的,而只是一个普通的Activity 。所以你必须坚持下去。 (注意:我从来没有亲自使用过ListActivity,所以我不能完全保证这一点)

android:id="@android:id/list" 

我还建议从ListView中删除这些行:

android:text="@+id/label"
android:textSize="20px"

text和textSize都不是ListView的有效属性。对于任何小部件,文本是我的有效属性,我认为您不希望将文本设置为"@+id/label"之类的内容。如果您尝试从strings.xml文件中引用字符串,则需要使用"@string/label"。引用类似于文本的id将在文本中放入一些对用户没有任何意义的十六进制代码(如果它完全有效)。

有可能删除这些可能会解决您的麻烦,如果是这样我的猜测是将文本设置为另一个ID会让人误以为您的列表没有ID list

如果这不能解决您的问题,我建议切换到普通的Activity而不是ListActivity,并通过findViewById()获取对ListView的引用,就像它们在您链接的示例中一样。