我使用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>希望大牛们能解答一下

解决方案 »

  1.   

    LinearLayout的match_parent是哪个版本的?我记得只有fill_parent和wrap_content啊
    还有,LZ具体是什么问题?崩了?错误的LOG是什么?
      

  2.   


    一运行就直接崩了,因为只是个演示程序,没有别的逻辑主要代码就是几行
           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
      

  3.   


    在这一行出错listAdapter = new SimpleAdapter(this, data, R.layout.list, new String[]{"姓名", "序号"}, new int[]{R.id.textView1, R.id.textView2});
          
      

  4.   

    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吗
      

  5.   

    R.layout.list的代码我已经贴在下面了,是自己写的layout,和书上给的例子是一样的
      

  6.   

    match_parent 是2.2以后才有的,不影响显示和匹配,楼主不要用中文,先试试英文能不能显示,应该就是中文处理的事
      

  7.   


    从DDMS上看log,看看报的是什么错。
      

  8.   

    把prepareData和Adapter声明中的中文都改为英文以后还是出错= =! 我也快崩了
      

  9.   

    这位仁兄说的有道理,应该是R.layout.list出了问题
      

  10.   

    看看你导包什么的对了么,两个R很容易就弄错。
    看看log,不是哪一行,而是贴一下log的错误提示。
      

  11.   

    今天继续改,发现问题是出在data上面,如果改为
    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;
    }
      

  12.   

    今天继续改,发现问题出在data的初始化上Status类只包含username和location两个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;
    }改为静态数据后可正常显示(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);
    }
      

  13.   

    你可以通过定制  BaseAdapter 来解决这个问题
    关键是理解Adapter