如何使用intent启动ListActivity?

时间:2013-04-30 08:32:16

标签: android listactivity

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 ListActivity更改为extends Activity,则代码运行正常。如何使用extends ListActivity使其工作?

3 个答案:

答案 0 :(得分:1)

您的错误清楚地表明:

  

E / AndroidRuntime(2010):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.listinflator_demo / com.example.listinflator_demo.ListPage}:java.lang.RuntimeException:您的内容必须具有ListView,其中id属性是'android.R.id.list'“

确保在您为list_page contentView设置的XML布局文件Activity中,您定义了ListView对象,其ID为{{1} }}

答案 1 :(得分:0)

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

所以在list_page.xml

中的listview中添加android:id="@android:id/list"

像:

<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"/>

检查此link以获取更多详细信息。这是example


<强>编辑:

如果您使用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);
}

答案 2 :(得分:0)

我认为你必须使用string类型的ArrayAdapter,因为你已经使用了string-array来存储月份

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

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