2011-08-18 91 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(); 

    } 
});