android 移除多个数组,android – 删除ArrayList上的元素会在ArrayAdap...

我正在开发一个Android 3.1应用程序.

我有自定义ArrayAdapter.我想在ListView中显示名称列表.

这些名称是可以下载并在本地保存的表单.当用户下载并保存一个或多个时,我调用updateFormsNotDownloaded().但是当我这样做时,我得到一个IndexOutOfBoundsException.我认为这个问题是因为我调用了notifyDataSetChanged().

看看我的代码:

public class FormAdapter extends ArrayAdapter

{

private Context context;

private int layoutResourceId;

private List

forms;

private ArrayList checkedItemsPosition;

private Button downloadButton;

public ArrayList getCheckedItemsPosition()

{

return checkedItemsPosition;

}

public String[] getSelectedFormsId()

{

String[] ids = new String[checkedItemsPosition.size()];

int i = 0;

for(Integer pos : checkedItemsPosition)

{

Form f = forms.get(pos.intValue());

ids[i] = f.FormId;

i++;

}

return ids;

}

/**

* Called when selected forms has been downloaded and save it locally correctly.

*/

public void updateFormsNotDownloaded()

{

ArrayList

copyForms = new ArrayList();

for (int i = 0; i < forms.size(); i++)

{

if (!checkedItemsPosition.contains(new Integer(i)))

copyForms.add(forms.get(i));

}

forms = copyForms;

checkedItemsPosition.clear();

notifyDataSetChanged();

}

public FormAdapter(Context context, int textViewResourceId,

List

objects, Button downloadButton)

{

super(context, textViewResourceId, objects);

this.context = context;

this.layoutResourceId = textViewResourceId;

this.forms = objects;

this.checkedItemsPosition = new ArrayList();

this.downloadButton = downloadButton;

}

@Override

public View getView(final int position, View convertView, ViewGroup parent)

{

View row = convertView;

if (row == null)

{

LayoutInflater inflater = ((Activity)context).getLayoutInflater();

row = inflater.inflate(layoutResourceId, parent, false);

}

Form f = forms.get(position);

if (f != null)

{

CheckBox checkBox = (CheckBox)row.findViewById(R.id.itemCheckBox);

if (checkBox != null)

{

checkBox.setText(f.Name);

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()

{

public void onCheckedChanged(CompoundButton buttonView,

boolean isChecked)

{

//Form f = forms.get(position);

if (isChecked)

{

//checkedItems.add(f.FormId);

checkedItemsPosition.add(new Integer(position));

}

else

{

//checkedItems.remove(checkedItems.indexOf(f.FormId));

checkedItemsPosition.remove(checkedItemsPosition.indexOf(new Integer(position)));

}

downloadButton.setEnabled(checkedItemsPosition.size() > 0);

}

});

}

}

return row;

}

}

我在表单上有三个项目,但我删除了其中一个.

为什么我得到那个例外?

这是异常日志:

java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2

at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)

at java.util.ArrayList.get(ArrayList.java:308)

at es.viacognita.adapters.FormAdapter.getView(FormAdapter.java:89)

at android.widget.AbsListView.obtainView(AbsListView.java:1949)

at android.widget.ListView.makeAndAddView(ListView.java:1756)

at android.widget.ListView.fillDown(ListView.java:656)

at android.widget.ListView.fillSpecific(ListView.java:1314)

at android.widget.ListView.layoutChildren(ListView.java:1587)

at android.widget.AbsListView.onLayout(AbsListView.java:1800)

at android.view.View.layout(View.java:9581)

at android.view.ViewGroup.layout(ViewGroup.java:3877)

at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1542)

at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1403)

at android.widget.LinearLayout.onLayout(LinearLayout.java:1314)

at android.view.View.layout(View.java:9581)

at android.view.ViewGroup.layout(ViewGroup.java:3877)

at android.widget.FrameLayout.onLayout(FrameLayout.java:400)

at android.view.View.layout(View.java:9581)

at android.view.ViewGroup.layout(ViewGroup.java:3877)

at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1542)

at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1403)

at android.widget.LinearLayout.onLayout(LinearLayout.java:1314)

at android.view.View.layout(View.java:9581)

at android.view.ViewGroup.layout(ViewGroup.java:3877)

at android.widget.FrameLayout.onLayout(FrameLayout.java:400)

at android.view.View.layout(View.java:9581)

at android.view.ViewGroup.layout(ViewGroup.java:3877)

at android.view.ViewRoot.performTraversals(ViewRoot.java:1253)

at android.view.ViewRoot.handleMessage(ViewRoot.java:2003)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loop(Looper.java:132)

at android.app.ActivityThread.main(ActivityThread.java:4025)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:491)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)

at dalvik.system.NativeStart.main(Native Method)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值