我使用simpleAdapter想把一个status对象列表中的name和location 属性显示在列表的每一项中,照着书上的一步步写写来,还是出问题,找了很久也没发现问题在哪下面是代码
public class ShowList extends Activity {
/** Called when the activity is first created. */
public ArrayList<Map<String, Object>> data;
public SimpleAdapter listAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ListView list= (ListView) findViewById(R.id.listView1);
ListView list = new ListView(this);
// Status data = new Status();
prepareData();
// list.setAdapter( new ArrayAdapter<Status>(this, android.R.layout.simple_list_item_1, Status.getListData() ));
listAdapter = new SimpleAdapter(this, data, R.layout.list, new String[]{"姓名", "序号"}, new int[]{R.id.textView1, R.id.textView2});
list.setAdapter(listAdapter);
setContentView(list);
list.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
AlertDialog.Builder ad=new AlertDialog.Builder(ShowList.this);
ad.setTitle(Status.getString()[arg2]);
ad.setPositiveButton("确定", null);
ad.show();
}
}); } private void prepareData() {
// TODO Auto-generated method stub
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
for(Status status : Status.getListData()){
item = new HashMap<String, Object>();
item.put("姓名", status.username);
item.put("序号", status.location);
data.add(item);
}
}
list.xml文件代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="horizontal">
<TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<TextView android:text="TextView" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>希望大牛们能解答一下
public class ShowList extends Activity {
/** Called when the activity is first created. */
public ArrayList<Map<String, Object>> data;
public SimpleAdapter listAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ListView list= (ListView) findViewById(R.id.listView1);
ListView list = new ListView(this);
// Status data = new Status();
prepareData();
// list.setAdapter( new ArrayAdapter<Status>(this, android.R.layout.simple_list_item_1, Status.getListData() ));
listAdapter = new SimpleAdapter(this, data, R.layout.list, new String[]{"姓名", "序号"}, new int[]{R.id.textView1, R.id.textView2});
list.setAdapter(listAdapter);
setContentView(list);
list.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
AlertDialog.Builder ad=new AlertDialog.Builder(ShowList.this);
ad.setTitle(Status.getString()[arg2]);
ad.setPositiveButton("确定", null);
ad.show();
}
}); } private void prepareData() {
// TODO Auto-generated method stub
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
for(Status status : Status.getListData()){
item = new HashMap<String, Object>();
item.put("姓名", status.username);
item.put("序号", status.location);
data.add(item);
}
}
list.xml文件代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="horizontal">
<TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<TextView android:text="TextView" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>希望大牛们能解答一下
还有,LZ具体是什么问题?崩了?错误的LOG是什么?
一运行就直接崩了,因为只是个演示程序,没有别的逻辑主要代码就是几行
listAdapter = new SimpleAdapter(this, data, R.layout.list, new String[]{"姓名", "序号"}, new int[]{R.id.textView1, R.id.textView2});
list.setAdapter(listAdapter);
setContentView(list);
list.setOnItemClickListener(new OnItemClickListener() {不知道是不是adapter设置错了 还是布局文件的问题,SDK版本是2.3.1
在这一行出错listAdapter = new SimpleAdapter(this, data, R.layout.list, new String[]{"姓名", "序号"}, new int[]{R.id.textView1, R.id.textView2});
我估计是R.layout.list的问题。R.layout.list它是系统默认就有的layout吗,或者你建立过这个layout吗
从DDMS上看log,看看报的是什么错。
看看log,不是哪一行,而是贴一下log的错误提示。
private void PrepareData() {
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
item = new HashMap<String, Object>();
item.put("姓名", "张三小朋友");
item.put("性别", "男");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "王五同学");
item.put("性别", "男");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "小李师傅");
item.put("性别", "女");
data.add(item);
}
这个方法初始化数据就可以正常显示(map中的key值做相应修改)至于Status类 只包含 username和location2个String类型属性
getListData方法如下 public static List<Status> getListData(){
List<Status> list = null; for(int i=0; i<5; i++){
list.add(new Status("hello", Integer.toString(i)));
}
return list;
}
public static List<Status> getListData(){
List<Status> list = null; for(int i=0; i<5; i++){
list.add(new Status("hello", Integer.toString(i)));
}
return list;
}改为静态数据后可正常显示(map中的key做相应修改)
private void PrepareData() {
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
item = new HashMap<String, Object>();
item.put("姓名", "张三小朋友");
item.put("性别", "男");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "王五同学");
item.put("性别", "男");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "小李师傅");
item.put("性别", "女");
data.add(item);
}
关键是理解Adapter