我尝试从ListAdapter获取数据,但我得到了奇怪的值。我不能在另一种方法中重复使用这个值。
private void updateList() {
ListAdapter adapter = new SimpleAdapter(this, mCommentList,
R.layout.single_post, new String[] { title, message,
username }, new int[] { R.id.title, R.id.message,
R.id.username });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String aux = (String) lv.getItemAtPosition(position).toString();
//To display "You Clicked at {message=hello, username=myself, title=hello }"
Toast.makeText(ReadComments.this, "You Clicked at " + aux, Toast.LENGTH_SHORT).show();
//I want only display "myself" (the content of username), but I get strange values like a lot of numbers.
//"You Clicked at android.widget.TextView{b40a1c10 V.ED ..........5,35-45,56#7f060002 app:id/message}
Toast.makeText(ReadComments.this, "You Clicked at " + view.findViewById(R.id.message).toString(), Toast.LENGTH_SHORT).show();
}
});
}
我如何使用&#34;我自己&#34;项目在另一种方法和表现一个吐司的消息? 有什么想法吗?
答案 0 :(得分:1)
您对 lv.getItemAtPosition(position)的调用返回一个常规java对象,并且您正在调用该常规Java对象的 toString()方法。这将为您提供一个包含类名的字符串,该对象的hashCode的HexString版本。这个字符串似乎不是你想要的。因此,在该默认字符串上转换为String对您没有帮助。
相反,通过调用getItemAtPosition()获取对象(因为您的listAdapter似乎填充了String值)。正如我已经解释的那样,你不需要在那时调用toString()。
因此,您修改后的代码应如下所示:
private void updateList() {
ListAdapter adapter = new SimpleAdapter(this, mCommentList,
R.layout.single_post, new String[] { title, message,
username }, new int[] { R.id.title, R.id.message,
R.id.username });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String aux = lv.getItemAtPosition(position);
Toast.makeText(ReadComments.this, "You Clicked at " + aux, Toast.LENGTH_SHORT).show();
Toast.makeText(ReadComments.this, "You Clicked at " + view.findViewById(R.id.message).toString(), Toast.LENGTH_SHORT).show();
}
});
}
答案 1 :(得分:0)
我假设您在R.id.message中使用了TextView,因此您正在访问对象哈希表id(通过调用toString),
<强>解决方案强>
替换此行
((TextView的)view.findViewById(R.id.message))的getText()的toString();
而不是
view.findViewById(R.id.message)的ToString()
答案 2 :(得分:0)
lv.getItemAtPosition(position)返回放在列表中的Map对象。 以下代码我认为应该有效;
Map map = (Map) lv.getItemAtPosition(position);
String title = map.get("title");
String message = map.get("message");
String username= map.get("username");