读书人

学习LIstView与Adapter时的有关问题

发布时间: 2013-07-09 09:50:47 作者: rapoo

学习LIstView与Adapter时的问题
刚接触Android不久,在学习UI组件ListView的过程中,碰到了一点问题,求各位前辈指点迷津.
在模拟器运行时显示的是unfortunately,XX has stopped,请问为什么会这样?
我的项目的源码如下:
[MainActivity]
public class MainActivity extends ListActivity {
/*Called when the Activity is first created*/
//变量的声明
private ListView Lv;
private SimpleAdapter Sadapter;
private List<Map<String,String>> Lv_Date=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Lv_Date=Date_Source.getMaps();//实例化数据源Lv_Date
Lv=(ListView)this.findViewById(R.id.listView);

//对象Sadapter的生成
Sadapter=new SimpleAdapter(MainActivity.this, Lv_Date, R.layout.activity_main,
new String[]{"Fname","Fprice","Faddress"},
new int[]{R.id.Fname,R.id.Fprice,R.id.Faddress});
Lv.setAdapter(Sadapter);//为Lv设置一个SimpleAdapter的适配器

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}
[Date_Source] public class Date_Source {
public Date_Source(){

}//类Date_Source的构造方法

public static List<Map<String,String>> getMaps(){
List<Map<String,String>> LtMaps=new ArrayList<Map<String,String>>();
Map<String,String> map1=new HashMap<String, String>();
Map<String,String> map2=new HashMap<String, String>();
Map<String,String> map3=new HashMap<String, String>();
//map1.put(key, value)
map1.put("Fname", "桃子");
map1.put("Fprice", "¥20");
map1.put("Faddress", "湖南");

map2.put("Fname", "李子");
map2.put("Fprice", "¥15");
map2.put("Faddress", "湖北");

map3.put("Fname", "哈密瓜");
map3.put("Fprice", "¥30");
map3.put("Faddress", "新疆");


LtMaps.add(map1);
LtMaps.add(map2);
LtMaps.add(map3);
return LtMaps;

}
}
布局文件:<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:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">

<TextView
android:id="@+id/Fname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:textSize="15sp"
android:text="@string/Fname"/>

<TextView
android:id="@+id/Fprice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:textSize="15sp"


android:text="@string/Fprice"/>

<TextView
android:id="@+id/Faddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:textSize="15sp"
android:text="@string/Faddress"/>
</LinearLayout>

<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:scrollbars="vertical"></ListView>

</LinearLayout>

LogCat显示的信息:06-27 02:58:04.835: D/AndroidRuntime(417): Shutting down VM
06-27 02:58:04.835: W/dalvikvm(417): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-27 02:58:04.875: E/AndroidRuntime(417): FATAL EXCEPTION: main
06-27 02:58:04.875: E/AndroidRuntime(417): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jiaopeng.test_listview/com.jiaopeng.test_listview.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)


06-27 02:58:04.875: E/AndroidRuntime(417): at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.os.Looper.loop(Looper.java:123)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-27 02:58:04.875: E/AndroidRuntime(417): at java.lang.reflect.Method.invokeNative(Native Method)
06-27 02:58:04.875: E/AndroidRuntime(417): at java.lang.reflect.Method.invoke(Method.java:521)
06-27 02:58:04.875: E/AndroidRuntime(417): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-27 02:58:04.875: E/AndroidRuntime(417): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-27 02:58:04.875: E/AndroidRuntime(417): at dalvik.system.NativeStart.main(Native Method)
06-27 02:58:04.875: E/AndroidRuntime(417): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ListActivity.onContentChanged(ListActivity.java:245)
06-27 02:58:04.875: E/AndroidRuntime(417): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:201)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.Activity.setContentView(Activity.java:1647)
06-27 02:58:04.875: E/AndroidRuntime(417): at com.jiaopeng.test_listview.MainActivity.onCreate(MainActivity.java:20)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-27 02:58:04.875: E/AndroidRuntime(417): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-27 02:58:04.875: E/AndroidRuntime(417): ... 11 more
06-27 02:58:08.366: I/Process(417): Sending signal. PID: 417 SIG: 9
listview Android
[解决办法]
由于你是继承的listActivity,其已经用setContentView设置了listview了,
所以你不需要在setContentView了,当然如果你要替换的话就另当别论了.


你的这个错的话改两个地方
1.去掉setContentView
2.直接用getListView()来得到listView对象
[解决办法]
异常信息里面说:Your content must have a ListView whose id attribute is 'android.R.id.list'

把你那个xml里面ListView的id更改成list,这个是标准约定。

读书人网 >Android

热点推荐