如何从列表中删除行,重新加载listView,然后在现有文件中写入一个字符串?

时间:2012-06-27 13:55:49

标签: android android-listview android-alertdialog android-adapter android-file

我想从数组中删除数组索引,然后使用我的新数组重新加载listView,然后将字符串写入android中的现有文件。我使用以下代码:

 OnItemLongClickListener longClickListener = new OnItemLongClickListener(){

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                itemPosition = position;

                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
                alertDialogBuilder.setTitle("Warning");

                alertDialogBuilder
                .setMessage("Are you sure?")
                .setCancelable(false)
                .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        ArrayList<String> itemsList = new ArrayList<String>();
                        for(int i=0; i<items.length; i++){
                            itemsList.add(items[i]);
                        }

                        itemsList.remove(itemPosition);
                        items = new String[itemsList.size()];
                        for(int i=0; i<itemsList.size(); i++){
                            items[i] = itemsList.get(i);
                        }

                        adapter.notifyDataSetChanged();

                        String newData = "";

                        for(int i=0; i<items.length; i++){
                            newData = newData+items[i];
                            if(i < items.length-1){
                                newData = newData+"NEXTLINE";
                            }
                        }
                        // write string to existing file
                        try {
                            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
                            fos.write(newData.getBytes());
                            fos.close();
                        } catch (FileNotFoundException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }


                    }
                  })
                .setNegativeButton("No",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // if this button is clicked, just close
                        // the dialog box and do nothing
                        dialog.cancel();
                    }
                });

                AlertDialog alertDialog = alertDialogBuilder.create();
                alertDialog.show();

                return true;
            }

        };

当我在提醒时单击是然后我的应用程序没有响应,一段时间后我的手机要求杀死应用程序?任何人都可以告诉我这个代码有什么问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题在于遵循代码的瑕疵......如果您的列表有太大的延迟,并且您正在将它循环三次,并且介于两者之间,您也会在列表中刷新。

             ArrayList<String> itemsList = new ArrayList<String>();
                    for(int i=0; i<items.length; i++){
                        itemsList.add(items[i]);
                    }

                    itemsList.remove(itemPosition);
                    items = new String[itemsList.size()];
                    for(int i=0; i<itemsList.size(); i++){
                        items[i] = itemsList.get(i);
                    }

                    adapter.notifyDataSetChanged();

                    String newData = "";

                    for(int i=0; i<items.length; i++){
                        newData = newData+items[i];
                        if(i < items.length-1){
                            newData = newData+"NEXTLINE";
                        }

尝试调试并减少此次点击的代码和循环...