1.错误如下:
Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list
2.描述:实现圆形菜单的时候遇到的一个BUG,写法如下:(Activity中的代码,首先需要Activity继承ListActivity)
getListView().setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, new String[] {
"建行圆形菜单", "圆形菜单" }));
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/material_blue_400"
android:gravity="center_vertical"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:background="@drawable/turnplate_bg_left"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="手机银行"
android:textColor="#ffffff"
android:textSize="20dp" />
<TextView
android:layout_width="fill_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:textAlignment="textStart"
android:layout_marginTop="5dp"
android:text="贴心的银行服务,带给您更安全便捷的智能金融体验。"
android:textColor="#ffffff"
android:textSize="13.5dip" />
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<com.example.m1571.mycolorfulnews.utils.CircleMenuLayout
android:id="@+id/id_menulayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/turnplate_bg_right" >
<RelativeLayout
android:id="@id/id_circle_menu_item_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:layout_width="104.0dip"
android:layout_height="104.0dip"
android:layout_centerInParent="true"
android:background="@drawable/turnplate_center_unlogin" />
<ImageView
android:layout_width="116.0dip"
android:layout_height="116.0dip"
android:layout_centerInParent="true"
android:background="@drawable/turnplate_mask_unlogin_normal" />
</RelativeLayout>
</com.example.m1571.mycolorfulnews.utils.CircleMenuLayout>
</FrameLayout>
</LinearLayout>
可以看到布局中没有ListView控件,在activity的onCreate中没有找到ListView的控件引起的错误;ListActivity内部含有ListView,而该ListView没有xml来描述界面,让ListViewActivity继承Activity,同时在布局上添加一个ListView,然后通过id找到控件即可。
3.解决方法:
a).在布局中添加ListView:ListView的id设置为“@android:id/list”或android:id=”@id/android:list”
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
在activity的onCreate中写法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_circle_menu);
getListView().setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, new String[] {
"建行圆形菜单", "圆形菜单" }));
}
list_item布局:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="KING"
android:textColor="@color/material_blue_400"
android:textSize="13dp"
android:orientation="vertical" >
</TextView>
此方法亲试可行。
b).在布局中添加:
<ListView android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
在activity中的onCreate中写法:
ListView lv = (ListView) findViewById(R.id.listview);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
lv.setTextFilterEnabled(true);
此方法失败,依然是这个错误。
c).还有一种写法:
若用到了getListView()方法 ,那么也必须在main.xml文件 里定义一个ListView,并且id必须为android.R.id.list
super.onCreate(savedInstanceState);
setContentView(R.layout.xx);
SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.list_view,
new String[]{"title","info","img"},
new int[]{R.id.title,R.id.info,R.id.img});
setListAdapter(adapter);
在初始化的时候,若要用ListView显示列表,就必须,在main.xml文件里添加控件ListView且id为android:id/list,若把上面的setContentView(R.layout.xx)去掉,再用ListView显示列表,也不会出错。