我有一个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;
}
请帮忙。
答案 0 :(得分:1)
@Shafi无法用这么短的代码给出答案,但这里有许多假设:
getCount()
方法,可能会返回0语句,这是错误的,您需要返回数组或arraylist的大小。 例如:
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);
}
感谢大家的回复。