从ListView的单个项目中获取奇怪的字符

时间:2014-08-18 16:03:07

标签: java android

我尝试从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;项目在另一种方法和表现一个吐司的消息? 有什么想法吗?

3 个答案:

答案 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");