首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView onItemClickListener

ListView onItemClickListener
EN

Stack Overflow用户
提问于 2013-09-26 07:33:13
回答 4查看 3.2K关注 0票数 0

错误:

代码语言:javascript
复制
09-26 13:09:38.551: E/AndroidRuntime(25966): FATAL EXCEPTION: main
09-26 13:09:38.551: E/AndroidRuntime(25966): java.lang.ClassCastException: java.util.HashMap
09-26 13:09:38.551: E/AndroidRuntime(25966):    at com.example.customlayoutlistview.MainActivity$1.onItemClick(MainActivity.java:79)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.widget.AdapterView.performItemClick(AdapterView.java:284)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.widget.ListView.performItemClick(ListView.java:3584)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:1846)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.os.Handler.handleCallback(Handler.java:587)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.os.Looper.loop(Looper.java:130)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at android.app.ActivityThread.main(ActivityThread.java:3687)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at java.lang.reflect.Method.invokeNative(Native Method)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at java.lang.reflect.Method.invoke(Method.java:507)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
09-26 13:09:38.551: E/AndroidRuntime(25966):    at dalvik.system.NativeStart.main(Native Method)

在以下方法实现中找到:

代码语言:javascript
复制
listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub
        int itemPostition = position;
        String itemString = (String)parent.getItemAtPosition(position);
        Toast.makeText(getApplicationContext(), ""+itemPostition+" "+itemString, Toast.LENGTH_SHORT).show();
    }
});

第79行:

代码语言:javascript
复制
String itemString = (String)parent.getItemAtPosition(position);

java类:

代码语言:javascript
复制
public class MainActivity extends Activity {

    ArrayList<HashMap<String, Object>> listFill;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listFill = new ArrayList<HashMap<String, Object>>();
        listView = (ListView) findViewById(R.id.listofviews);

        // Initializing and defining the contents to be filled
        int[] songIcons = { R.drawable.music, R.drawable.music,
                R.drawable.music, R.drawable.music, R.drawable.music };
        String[] songTitle = { "Song One", "Song Two", "Song Three",
                "Song Four", "Song Five" };
        String[] songDescription = { "Description One", "Description Two",
                "Description Three", "Description Four", "Description Five" };

        //Looping through the contents and adding it to our ArrayList 
        for (int i = 0; i < songIcons.length; i++) {
            HashMap<String, Object> toFill = new HashMap<String, Object>();
            //Filling the HashMap first
            toFill.put("songIcon", songIcons[i]);
            toFill.put("songTitle", songTitle[i]);
            toFill.put("songDescription", songDescription[i]);
            //Filling the HashMap inside the ArrayList
            listFill.add(toFill);
        }

        //Creating adapter for the listView
        ListAdapter adapter = new SimpleAdapter(MainActivity.this, listFill,
                R.layout.custom_layout, new String[] { "songIcon", "songTitle",
                        "songDescription" }, new int[] { R.id.list_icon,
                        R.id.list_title, R.id.list_description });
        listView.setAdapter(adapter);
//      setListAdapter(adapter);

        //Implementing on itemClicked

        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                // TODO Auto-generated method stub
                int itemPostition = position;
                String itemString = (String)parent.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(), ""+itemPostition+" "+itemString, Toast.LENGTH_SHORT).show();
            }
        });

    }

我为什么要犯这个错误?有人能帮忙吗。我正在尝试获取listView上的项目内容

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-26 07:35:16

您正在将HashMap对象转换为导致此异常的String对象。

票数 5
EN

Stack Overflow用户

发布于 2013-09-26 07:36:41

这里:

代码语言:javascript
复制
String itemString = (String)parent.getItemAtPosition(position);

返回的是一个HashMap,您将它转换成一个字符串。

票数 1
EN

Stack Overflow用户

发布于 2013-09-26 07:49:15

尝尝这个

代码语言:javascript
复制
String i= String.valueOf(position);
Toast.makeText(getApplicationContext(), i, Toast.LENGTH_LONG).show();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19022048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档