我試圖從列表視圖中刪除特定的行,但我的應用程序不斷崩潰。從列表視圖中刪除特定的行?
首先,我試圖只除去項形式listAdapter,但它崩潰:
listAdapter.remove(listAdapter.getItem(toDelete));
listAdapter.notifyDataSetChanged();
然後我還試圖從ListView中直接除去它,但它也崩潰:
listView.removeViewAt(toDelete);
listAdapter.notifyDataSetChanged();
toDelete是整數具有我點擊的行的數字ID的變量。
那麼我怎樣才能從列表視圖中刪除特定的行?
這是完整的代碼,如果有人想它:
listView.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
deleteAlert.setTitle("Warning");
deleteAlert.setMessage("Are you sure you want to delete this?");
toDelete = arg2;
deleteAlert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
File directory = new File (externalStoragePath + File.separator + "Android/data/com.whizzappseasyvoicenotepad/");
File deleteFile = new File (directory, fileNames.get(toDelete) + ".mp3");
deleteFile.delete();
dialog.dismiss();
listView.removeViewAt(toDelete);
listAdapter.notifyDataSetChanged();
Log.i("TAG", "Deleting file: " + directory + fileNames.get(toDelete) + ".mp3");
}
});
這真的很難擴大「崩潰」的一部分。這很簡單:只要我點擊「是」按鈕,應用程序崩潰。這裏的logcat文件,如果有幫助:
08-06 19:05:07.437: E/AndroidRuntime(16257): FATAL EXCEPTION: main
08-06 19:05:07.437: E/AndroidRuntime(16257): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
08-06 19:05:07.437: E/AndroidRuntime(16257): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
08-06 19:05:07.437: E/AndroidRuntime(16257): at java.util.ArrayList.get(ArrayList.java:308)
08-06 19:05:07.437: E/AndroidRuntime(16257): at com.whizzappseasyvoicenotepad.RecordedLibrary$2$1.onClick(RecordedLibrary.java:113)
08-06 19:05:07.437: E/AndroidRuntime(16257): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
08-06 19:05:07.437: E/AndroidRuntime(16257): at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 19:05:07.437: E/AndroidRuntime(16257): at android.os.Looper.loop(Looper.java:137)
08-06 19:05:07.437: E/AndroidRuntime(16257): at android.app.ActivityThread.main(ActivityThread.java:5103)
08-06 19:05:07.437: E/AndroidRuntime(16257): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 19:05:07.437: E/AndroidRuntime(16257): at java.lang.reflect.Method.invoke(Method.java:525)
08-06 19:05:07.437: E/AndroidRuntime(16257): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-06 19:05:07.437: E/AndroidRuntime(16257): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-06 19:05:07.437: E/AndroidRuntime(16257): at dalvik.system.NativeStart.main(Native Method)
@Keyser檢查我的編輯後,請 – Guy
嘛錯誤是不言自明的。你的數組列表的大小爲0.你有沒有嘗試過任何的建議[在這裏](http://stackoverflow.com/a/5344958/645270)? – keyser
'listAdapter.remove(listAdapter.getItem(toDelete));'是正確的方法。你可以發佈你的適配器代碼嗎? –