【发布时间】:2013-07-25 09:13:49
【问题描述】:
我创建了一个包含内容的列表视图,并为每一行使用了删除按钮。在这里,我尝试使用它的删除按钮从列表视图中删除项目。在删除列表视图的最终元素时,抛出 ArrayIndexOutOfBound 异常。
我用谷歌搜索并找到了一些解决方案,例如:
@Override
public int getCount() {
return lsit.size();
}
和Adapter.notifyDataSetChanged();
但是没有一个解决方案不能解决我的问题。
这是我的代码:
public View getView( final int position, View convertView,final ViewGroup parent) {
final ViewHolder holder;
System.out.println("saved homes list..");
System.out.println("Position: "+m_itemClickedPosition_savedHomes);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.nearbyhomestext, null);
holder = new ViewHolder();
holder.homeTitle = (TextView) convertView.findViewById(R.id.text_title);
holder.homePlan = (TextView) convertView.findViewById(R.id.text_plan);
holder.deleteButton = (Button) convertView.findViewById(R.id.delete_btn);
holder.activeDrawable = getActivity().getResources().getDrawable(R.drawable.gradient_bg_hover);
holder.inActiveDrawable = getActivity().getResources().getDrawable(R.drawable.gradient_bg);
holder.deleteButton.setTag(position);
//holder.deleteButton.setVisibility(View.INVISIBLE);
holder.deleteButton.setOnClickListener(
new Button.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Clicked position:"+position);
System.out.println("ArraySize:"+m_savedHomesList.size());
//Integer index = (Integer) v.getTag();
m_savedHomesList.remove(position);
m_savedHomesAdapter.notifyDataSetChanged();
}
}
);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
LogCatError:
07-25 14:25:56.187: E/AndroidRuntime(5152): FATAL EXCEPTION: main
07-25 14:25:56.187: E/AndroidRuntime(5152): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
07-25 14:25:56.187: E/AndroidRuntime(5152): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
07-25 14:25:56.187: E/AndroidRuntime(5152): at java.util.ArrayList.remove(ArrayList.java:406)
07-25 14:25:56.187: E/AndroidRuntime(5152): at com.cpt.realtor.tablet.fragments.HomeListFragment$SavedHomeBaseAdapter$1.onClick(HomeListFragment.java:399)
07-25 14:25:56.187: E/AndroidRuntime(5152): at android.view.View.performClick(View.java:2485)
07-25 14:25:56.187: E/AndroidRuntime(5152): at android.view.View$PerformClick.run(View.java:9080)
07-25 14:25:56.187: E/AndroidRuntime(5152): at android.os.Handler.handleCallback(Handler.java:587)
07-25 14:25:56.187: E/AndroidRuntime(5152): at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 14:25:56.187: E/AndroidRuntime(5152): at android.os.Looper.loop(Looper.java:123)
07-25 14:25:56.187: E/AndroidRuntime(5152): at android.app.ActivityThread.main(ActivityThread.java:3687)
07-25 14:25:56.187: E/AndroidRuntime(5152): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 14:25:56.187: E/AndroidRuntime(5152): at java.lang.reflect.Method.invoke(Method.java:507)
07-25 14:25:56.187: E/AndroidRuntime(5152): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
07-25 14:25:56.187: E/AndroidRuntime(5152): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-25 14:25:56.187: E/AndroidRuntime(5152): at dalvik.system.NativeStart.main(Native Method)
需要帮助来解决这个问题..
提前谢谢..
【问题讨论】:
-
index 1, size is 1 => 列表的大小是“1”所以它看起来像这样:[0] 你试图删除第二个单元格 [0][1] 这确实'不存在
-
ListView 的位置也是从零开始的。那为什么
position-1? -
@S.D: 我在位置 1 的位置上尝试了位置。结果仍然相同
-
嘿,您的适配器访问 m_villages,但您正试图从 m_savedHomesList 中删除一个元素。而不是提供部分代码,而是提供您的适配器的完整代码。那么只有其他人才能发现问题所在。
-
你必须把 Click Listener 放在 "return convertView;" 之前
标签: android listview exception