2013-09-26 148 views
0

错误:的ListView onItemClickListener

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) 

正在对以下的方法实施测定值:

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行:

String itemString = (String)parent.getItemAtPosition(position); 

Java类:

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中的项目内容点击

+1

试'的HashMap <字符串,对象>地图= HashMap中<字符串,对象> parent.getItemAtPosition(位置)' – Raghunandan

回答

5

您铸造HashMap对象为String对象这一异常引起

1

这里:

String itemString = (String)parent.getItemAtPosition(position); 

什么是返回是一个HashMap和你将它转换为String。

1

试试这个

String i= String.valueOf(position); 
Toast.makeText(getApplicationContext(), i, Toast.LENGTH_LONG).show(); 
1

由于ArrayList的listFill传递到您的ListView适配器, 你可以得到包含标题,图标和说明对应于被点击的项目的位置该歌曲的HashMap对象。 因此,

HashMap<String, Object> itemSong = HashMap<String, Object>parent.getItemAtPosition(position); 
String itemString = itemSong.get("SongTitle"); 

将符合您的要求。

0

尝试这种

String itemString = parent.getItemAtPosition(position).toString(); 
Toast.makeText(getApplicationContext(), ""+itemPostition+" "+itemString, Toast.LENGTH_SHORT).show(); 
相关问题