0

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

我正在关注本教程,这似乎是最简单的:http ://www.heikkitoivonen.net/blog/2009/02/15/multicolumn-listview-in-android/

我有一个这样声明的 Java Activity:

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'

请帮忙,我很卡住

谢谢!!

4

1 回答 1

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 会使某些东西混淆为认为您的列表没有 idlist

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

于 2012-07-24T00:52:44.343 回答