Android - listView的click给出了索引超出范围的异常

时间:2011-08-18 09:05:03

标签: android android-widget

我有一个ListView我存储了一些URL,我使用一个类型为ArrayList<HashMap<String,String>>的arraylist加载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正确执行,但第二个print语句给出了以下错误 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;
    }

请帮忙。

3 个答案:

答案 0 :(得分:1)

@Shafi无法用这么短的代码给出答案,但这里有许多假设:

  1. 根据您的上述评论,您使用自定义适配器加载它,检查您的 getCount() 方法,可能会返回0语句,这是错误的,您需要返回数组或arraylist的大小。
  2. 例如:

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

答案 1 :(得分: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(); 

    }
});

答案 2 :(得分: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);
            }

感谢大家的回复。