長話短說:我有一個帶有customAdapter的listView(稱爲MathAdapter)。此適配器處理CalculationModel類型的ArrayList。默認情況下,我的列表中有〜15個CalculationModels,但是在特殊情況下,我必須刪除它們中的大約6個。ArrayIndexOutOfBoundsException在操作ArrayAdapter時
因爲我非常新的Android開發(我是從iOS的未來),我的第一個基本問題是:
會在哪裏一個正常操作的ListData?在我的情況下,一個片段初始化適配器並傳遞我的數據列表。在我的應用程序的生命週期中,我操縱這個列表並調用notifiyDataSetChanged。一切都按預期工作,我可以一次刪除或添加1個CalculationModel,沒有任何問題。
刪除6個CalculationModels時也沒有問題,工作正常。當我嘗試應用程序崩潰與下面的錯誤日誌,以重新插入:
04-27 07:48:59.194 1766-1766/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test, PID: 1766
java.lang.ArrayIndexOutOfBoundsException: length=11; index=11
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:8271)
at android.widget.ListView.layoutChildren(ListView.java:1600)
at android.widget.AbsListView.onLayout(AbsListView.java:2528)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at com.example.test.TouchDisableView.onLayout(TouchDisableView.java:57)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15655)
at android.view.ViewGroup.layout(ViewGroup.java:4856)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2284)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2004)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1236)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6471)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:573)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
要清楚,我不是新來的Java,和我看到的ArrayIndexOutOfBounds的問題,但我不知道哪裏發生這種情況,因爲我的名單和項目的適配器數均高於11(14如預期)
代碼:
List<CalculationModel> data;
List<CalculationModel> backupData = new ArrayList<>();
@Override
public void onResume() {
if (mathApp.isCleanPhase) {
removeNonClearData();
} else {
addNonClearData();
}
adapter.notifyDataSetChanged();
super.onResume();
}
public void removeNonClearData() {
if (backupData.size() > 0) return;
for (int i = 0; i < data.size(); i++) {
CalculationModel tmp = data.get(i);
String sName = tmp.getSName();
if (sName.equals("r") || sName.equals("wv") || sName.equals("qv") || sName.equals("tw") || sName.equals("ti") || sName.equals("h") || sName.equals("rs")) {
backupData.add(data.remove(i));
i--;
}
}
adapter.itemCount = data.size();
}
public void addNonClearData() {
if (backupData.size() == 0) return;
for (int i = 0; i < backupData.size(); i++) {
//'r' is a default parameter, which shall be in row 6
if (backupData.get(i).getSName().equals("r")) data.add(5, backupData.remove(i));
else data.add(backupData.remove(i));
}
adapter.itemCount = data.size();
print(data.size());
}
編輯:忘了提,得到的數據就被裝載我希望它的方式,但是當我在列表中再次滾動時,應用程序崩潰。所有的數據都在我想查看的列表中,但是當滾動時, - >崩潰。
提到的一樣,我只是不明白的地方這個錯誤來自於,因爲日誌沒有給出關於它的信息...
你可以發佈代碼嗎? –
添加代碼。希望它有助於 – glace
錯誤發生在哪個列表?數據還是備份數據? – Opiatefuchs