新手求教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是什么? --------------------编程问答--------------------
一运行就直接崩了,因为只是个演示程序,没有别的逻辑
主要代码就是几行
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打断点跟一下吧。 --------------------编程问答--------------------
在这一行出错
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吗 --------------------编程问答--------------------
R.layout.list的代码我已经贴在下面了,是自己写的layout,和书上给的例子是一样的 --------------------编程问答-------------------- match_parent 是2.2以后才有的,不影响显示和匹配,楼主不要用中文,先试试英文能不能显示,应该就是中文处理的事 --------------------编程问答--------------------
从DDMS上看log,看看报的是什么错。 --------------------编程问答--------------------
应该是中问 在作怪吧。 --------------------编程问答--------------------
应该是中问 在作怪吧。 --------------------编程问答-------------------- 把prepareData和Adapter声明中的中文都改为英文以后还是出错
= =! 我也快崩了 --------------------编程问答--------------------
这位仁兄说的有道理,应该是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