2012-06-03 91 views
1

我喜歡將選擇的項目值從ListView傳遞給另一個activity.I使用City類的屬性idCity和nameCity,我喜歡傳遞值被選擇到另一個活動 此代碼拋出java.lang.ClassCastException城市:java.lang.String中不能轉換爲java.util.HashMap中java.lang.String不能轉換爲java.util.HashMap異常

public ListView cities; 
ArrayList<City> cityList=new ArrayList<City>(); 

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.cities_view); 
    Resources r = getResources(); 
    String[] c = r.getStringArray(R.array.cities); 


    for(int i=0;i<c.length;i++) 
    { 
     cityList.add(new City(i,c[i])); 
    } 
    for(int i=0;i<c.length;i++) 
    { 
     System.out.println(cityList.get(i).idCity); 
     System.out.println(cityList.get(i).nameCity); 
    } 

    cities = (ListView) findViewById(R.id.listCities); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, c); 
    cities.setAdapter(adapter); 



    File file = new File(Environment.getExternalStorageDirectory() 
      .getAbsolutePath(), getString(R.string.exchangeOfficesFile)); 

    if (!file.exists()) { 
     startService(new Intent(this, DownloadAsyncService.class)); 
    } 


try{ 
    List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 
    for (City c : cityList) { 
     Map<String, String> map = new HashMap<String, String>(2); 
     map.put("idCity", Integer.toString(c.getIdCity())); 
     map.put("nameCity", c.getNameCity()); 

     data.add(map); 
    } 


    cities.setOnItemClickListener(new OnItemClickListener() { 


     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      Intent intent = new Intent(getApplicationContext(), 
        CitiesDetails.class); 

      HashMap<String,String> map=(HashMap<String, String>) parent.getItemAtPosition(position); 

      intent.putExtra("idCity", map.get("idCity")); 

      intent.putExtra("nameCity", map.get("nameCity")); 



      startActivity(intent); 
     } 

    }); 

}catch (Exception e) { 
    // TODO: handle exception 
    e.printStackTrace(); 
} 
} 

也許有人有同樣的問題?

+3

你閱讀的信息? – SLaks

+0

發佈堆棧跟蹤,錯誤發生在哪條線上? – antew

回答

4

你的陣列適配器是一個字符串列表:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, c); 

getItemAtPosition(int position)將返回該Adapter的類型相匹配的Object。所以在這種情況下,它會返回一個字符串,但你想將它轉換爲它HashMap<String, String>

HashMap<String,String> map=(HashMap<String, String>) parent.getItemAtPosition(position); 

更改爲:

String result = (String) parent.getItemAtPosition(position); 
相關問題