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
使其工作?
答案 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"/>
<强>编辑:强>
如果您使用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声明