2
public class ListPage extends ListActivity
{

ListView months;
ArrayAdapter my;
String[] monthlist = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sept", "oct", "nov", "dec"};

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.list_page);

    months = (ListView)findViewById(R.id.list);

    my = new ArrayAdapter(this,android.R.layout.simple_list_item_1,monthlist);

    months.setAdapter(my);
}

}

我正在尝试从另一个活动中启动此 ListActivity,但出现错误“04-30 08:30:45.234:

E/AndroidRuntime(2010): java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.example.listinflator_demo/com.example.listinflator_demo.
ListPage}: java.lang.RuntimeException: Your content must have a ListView 
whose id attribute is 'android.R.id.list'"

如果我更改extends ListActivityextends Activity,则代码可以正常工作。我如何使它工作使用extends ListActivity

4

3 回答 3

1

您的错误清楚地表明:

E/AndroidRuntime(2010):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.listinflator_demo/com.example.listinflator_demo.ListPage}:java.lang.RuntimeException:您的内容必须有一个 id 属性为的 ListView 'android.R.id.list'"

确保在 XML 布局文件中:list_page您设置为contentViewActivity您定义了ListView具有 id: 的对象list

于 2013-04-30T08:34:06.270 回答
0

ListActivity有一个默认布局,它由屏幕中央的单个全屏列表组成。但是,如果您愿意,您可以通过在 onCreate() 中使用 setContentView() 设置您自己的视图布局来自定义屏幕布局。为此,您自己的视图必须包含一个 ID 为“@android:id/list”的 ListView 对象(如果它在代码中,则为列表)

所以 android:id="@android:id/list"在你的 list_page.xml 中添加 listview

像:

<ListView android:id="@android:id/list"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#00FF00"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"/>

检查此链接以获取更多详细信息。这是示例


编辑:

如果您使用 ListActivity 那么您的代码将是:

public class ListPage extends ListActivity
{


ArrayAdapter my;
String[] monthlist = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sept", "oct", "nov", "dec"};

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.list_page);



    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, monthlist );
    setListAdapter(adapter);
}
于 2013-04-30T08:43:54.217 回答
0

我认为您必须使用字符串类型的 ArrayAdapter,因为您使用字符串数组来存储月份

ArrayAdapter<string> my = new ArrayAdapter<string>(this,android.R.layout.simple_list_item_1,monthlist);

PS::在您进行以下上述更改时,删除开头的 ArrayAdapter 声明

于 2013-06-11T06:46:55.287 回答