【问题标题】:Deleting Photo from SD Card and GridView Layout从 SD 卡和 GridView 布局中删除照片
【发布时间】:2013-09-22 08:31:59
【问题描述】:

我在下面有这段代码,我希望这样当我在 GridView 中长按我的照片时,我可以选择删除。这一切都完美无缺。但是,当我单击删除时,它实际上并没有从我的 GridView 或 SD 卡目录中删除照片。

       switch (item.getItemId()) {
            case R.id.deletePhoto:
                new AlertDialog.Builder(getActivity()).setTitle("Delete Photo")
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        photoGrid.setSelection(i);
                        final File dir = new File(GridViewDemo_ImagePath);
                        dir.mkdirs();
                        File[] files = dir.listFiles(new FilenameFilter() {

                            @Override
                            public boolean accept(File arg0, String arg1) {
                                return arg1.contains(".png");
                            }

                        });

                        File file = files[i].getAbsoluteFile();
                        file.delete();
                        Toast.makeText((MainActivity)getActivity(), "Photo deleted.", Toast.LENGTH_SHORT).show();
                    }
                })
                .setNeutralButton("Cancel", null)
                .create()
                .show();
                break;

是否有人知道如何执行此操作或我在代码中做错了什么?任何帮助或示例将不胜感激。提前致谢!

【问题讨论】:

    标签: android image photo android-sdcard android-file


    【解决方案1】:

    你永远不会调用/它永远不会被调用 file.delete();

    把这个放在对话框的onclick里面

                        File file = files[i].getAbsoluteFile();
                        file.delete();
                        Toast.makeText((MainActivity)getActivity(), "Photo deleted.", Toast.LENGTH_SHORT).show();
    

    .

                case R.id.deletePhoto:
                new AlertDialog.Builder(getActivity()).setTitle("Delete Photo")
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        photoGrid.setSelection(i);
                        final File dir = new File(GridViewDemo_ImagePath);
                        dir.mkdirs();
                        File[] files = dir.listFiles(new FilenameFilter() {
    
                        File file = files[i].getAbsoluteFile();
                        file.delete();
                        Toast.makeText((MainActivity)getActivity(), "Photo deleted.", Toast.LENGTH_SHORT).show();
    
    
    
                        });
                   .setNeutralButton("Cancel", null)
                .create()
                .show();
                break;
    

    【讨论】:

    • 文件 file = files[i].getAbsoluteFile();文件.delete();
    • @edwoollard 您在按确定时正在使用一个对话框,它应该删除但您调用了 File file = files[i].getAbsoluteFile();文件.删除();在确定按钮/肯定按钮的 onClick 侦听器之外
    • 不,我没有。反正我现在已经修好了。有两个问题,一个是相机中的照片保存为.jpg,而不是.png,所以它永远找不到它们。另一个是我使用 int i 作为位置,但这是错误的。相反,我使用了这一行: final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();然后在我称之为“i”的地方,我称之为“info.position”。
    • @edwoollard 无论您粘贴什么都是错误的,当您构建对话框时,您不能调用 file.delete
    • 我没有。我在 onClick 方法中调用了它。我知道我是对的方式是因为否则将找不到 i 变量。它找到了它,因此它必须在方法内,因为 i 必须在范围内。
    【解决方案2】:

    你必须放

                        File file = files[i].getAbsoluteFile();
    
                        file.delete();
    

    里面

      public void onClick(DialogInterface dialogInterface, int i) {}
    

    这样,当您在“删除照片”对话框上按“确定”按钮时,它将删除照片并调用方法删除;

    【讨论】:

    • 请向我解释它是如何不在 onClick 方法中的,因为对我来说它看起来确实如此。
    • @edwoollard 在调用 file.delete 之前你已经关闭了 onclick });
    • 不...这是 FilenameFilter 的关闭。
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多