当前位置:编程学习 > wap >>

新手求教ListView的问题

我使用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>


希望大牛们能解答一下 --------------------编程问答-------------------- LinearLayout的match_parent是哪个版本的?我记得只有fill_parent和wrap_content啊
还有,LZ具体是什么问题?崩了?错误的LOG是什么? --------------------编程问答--------------------
引用 1 楼 dinjay 的回复:
LinearLayout的match_parent是哪个版本的?我记得只有fill_parent和wrap_content啊
还有,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 --------------------编程问答-------------------- 用debug打断点跟一下吧。 --------------------编程问答--------------------
引用 3 楼 prince58 的回复:
用debug打断点跟一下吧。


在这一行出错

listAdapter = new SimpleAdapter(this, data, R.layout.list, new String[]{"姓名", "序号"}, new int[]{R.id.textView1, R.id.textView2});
      
--------------------编程问答-------------------- 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 楼 sixteenhai 的回复:
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吗

R.layout.list的代码我已经贴在下面了,是自己写的layout,和书上给的例子是一样的 --------------------编程问答-------------------- match_parent 是2.2以后才有的,不影响显示和匹配,楼主不要用中文,先试试英文能不能显示,应该就是中文处理的事 --------------------编程问答--------------------
引用 4 楼 liyang1221 的回复:
引用 3 楼 prince58 的回复:
用debug打断点跟一下吧。


在这一行出错

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


从DDMS上看log,看看报的是什么错。 --------------------编程问答--------------------
引用 4 楼 liyang1221 的回复:
引用 3 楼 prince58 的回复:
用debug打断点跟一下吧。


在这一行出错

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


应该是中问 在作怪吧。  --------------------编程问答--------------------
引用 4 楼 liyang1221 的回复:
引用 3 楼 prince58 的回复:
用debug打断点跟一下吧。


在这一行出错

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


应该是中问 在作怪吧。  --------------------编程问答-------------------- 把prepareData和Adapter声明中的中文都改为英文以后还是出错

= =! 我也快崩了 --------------------编程问答--------------------
引用 5 楼 sixteenhai 的回复:
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吗

这位仁兄说的有道理,应该是R.layout.list出了问题 --------------------编程问答-------------------- 看看你导包什么的对了么,两个R很容易就弄错。
看看log,不是哪一行,而是贴一下log的错误提示。 --------------------编程问答-------------------- 今天继续改,发现问题是出在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;
}

--------------------编程问答-------------------- 今天继续改,发现问题出在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);
}

--------------------编程问答-------------------- 你可以通过定制  BaseAdapter 来解决这个问题
关键是理解Adapter 
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,