2011-08-18 35 views
0

我有一個ListView我在哪裏存儲一些URL和我使用一個ArrayList這是該類型ArrayList<HashMap<String,String>>的加載列表視圖中的內容。我正在嘗試使用下面的代碼片段來處理這個列表的點擊。Android的 - ListView的點擊給出索引越界異常

 listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int pos, 
       long arg3) { 
      System.out.println("List Clicked..." + pos); 
      System.out.println("URL: " + listView.getItemAtPosition(pos).toString()); 
     } 
    }); 

第一SOP正確執行,但第二個打印語句是給我下面的錯誤 ERROR/AndroidRuntime(382): java.lang.IndexOutOfBoundsException: Invalid location 0, size is 0

這裏是我的適配器的getView()

 @Override 
    public View getView(int position, View arg1, ViewGroup arg2) { 
     View v = arg1; 

     if (v == null) 
     { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_row, null);  

     } 
     t1=(TextView) v.findViewById(R.id.text1); 
     HashMap<String, String> values = storedURLArrayList.get(position); 
     t1.setText(values.get("value")); 
     return v; 
    } 

請幫助。

+0

您使用自定義適配器還是自定義ListView ...? – ngesh

+0

我認爲listView.getItemAtPosition(pos)會給你一個特定的HashMap位於被點擊的位置,所以這可能是一個問題。我不確定但是.. –

+0

您能否請您添加一些關於您的問題的更多代碼和解釋? –

回答

0

我已經找到了解決,但我想知道是哪裏的問題是

我得到的列表項的位置。所以,我決定直接從ArrayList獲取值,並通過HashMap迭代以獲取存儲在該特定位置的URL。

HashMap<String, String> temp = URLArrayList.get(pos); 
      Iterator<String> myIterator = temp.keySet().iterator(); 
      int count = temp.size()-1; 
      String value = null; 
      while(myIterator.hasNext()) { 
       String key=(String)myIterator.next(); 
       value=(String)temp.get(key); 
      } 

謝謝大家的回覆。

1

@Shafi不能在這麼短的代碼給出答案,但許多假設可能在這裏:根據您的上述評論您正在使用自定義適配器加載它

  1. ,請檢查您getCount()方法,可能會返回0語句,這是錯誤的,您需要返回數組或ArrayList的大小。

例如:

public int getCount() { 
     return listData.size(); 
     // listData is the arrayList that you want to bind to listview 
    } 
+0

@Paresh我已經添加了有關適配器的更多信息,請查看。伯爵沒有問題。我重寫了'getCount()'方法,我能夠查看和更新​​列表。 – Shafi

1

沒有必要環路直通的列表,使用對象鍵找到該值是不夠好。請檢查下面的代碼。

list.setOnItemClickListener(new OnItemClickListener(){ 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    HashMap<String, String> o = myList.get(position); 
     Toast.makeText(YumyumActivity.this, "ID '" + o.get("category_id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

    } 
});