android multichoicemodelistener删除内部存储文件

时间:2014-11-03 15:40:54

标签: android

在我的应用程序中,我有一个Listview,其中启用了multichoicemodelistener。我想使用multichoicemodelistener删除内部存储文件(列表视图中显示的文件)。但没有运气。

这是我的代码

public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {



            case R.id.list_context_delte:
                SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions();
                for(int i = sparseBooleanArray.size() -1; i >= 0; i--)
                    context.deleteFile(sparseBooleanArray.keyAt(i));

                mAdapter.notifyDataSetChanged();
                mode.finish();

                Toast.makeText(ShowListActivity.this, R.string.deleted, Toast.LENGTH_SHORT).show();
                mode.finish();
        }
        return false;

    }

我收到一条错误消息:上下文类型中的方法deleteFile(String)不适用于参数(int)

有什么想法吗?

更新 我编辑了我的代码,所以知道它看起来像

 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {         
       case R.id.list_context_delte:
                nr = 0;
                SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions();

                for(int i = sparseBooleanArray.size() -1; i >= 0; i--)
                    if (sparseBooleanArray.get(i)) {
                        String items =  getListView().getAdapter().getItem(sparseBooleanArray.keyAt(i)).toString(); 

                        File dir = getFilesDir();
                    File file = new File(dir, (items));
                    file.delete();
                    RowItem selecteditem = mAdapter.getItem(sparseBooleanArray.keyAt(i));
                    mAdapter.remove(selecteditem);
                     mAdapter.notifyDataSetChanged();
                    Toast.makeText(ShowListActivity.this,items+ R.string.deleted, Toast.LENGTH_SHORT).show();


                       }
                    mode.finish();


        }



        return false;

    }

按下删除按钮后,文件消失了。但是当我退出活动并返回活动时,所有已删除的文件都会恢复。 文件是否未从内部存储中正确删除? 有人有建议吗?

2 个答案:

答案 0 :(得分:1)

假设文件存在,看起来您的代码将删除该文件。您可以添加一行以确保安全。

if(file.exists()){
  boolean isDeleted = file.delete();
  Log.v(TAG,"file delection is success : "+isDeleted);
}

我认为这里存在实际问题。实际上可能删除了文件,但是你没有刷新listview。一旦删除文件,删除适配器中的项目并更新列表视图。就像这样: / p>

     for(int i = sparseBooleanArray.size() -1; i >= 0; i--)
            if (sparseBooleanArray.get(i)) {
                String items =  getListView().getAdapter().getItem(sparseBooleanArray.keyAt(i)).toString();
        File dir = getFilesDir();
        File file = new File(dir, (items));
        boolean isDeleted = file.delete();
          if(isDeleted){
              mAdapter.deleteItem(items); // create a  method in adapter which will delete the item.
              mAdapter.notifyDataSetChanged();

        Toast.makeText(ShowListActivity.this,items+ R.string.deleted, Toast.LENGTH_SHORT).show();
            }

            }

            mode.finish();

答案 1 :(得分:0)

我终于明白了。 我的代码知道如下所示,它完美地删除了内部存储文件

 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {         
       case R.id.list_context_delte:
                nr = 0;

                SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions();

                for(int i = sparseBooleanArray.size() -1; i >= 0; i--) {
                    if (sparseBooleanArray.get(i)) {
                   RowItem selecteditem = mAdapter.getItem(sparseBooleanArray.keyAt(i));
                   String selecteditemString = selecteditem.getFilename().toString();

                    File dir = getFilesDir();
                    File file = new File(dir, (selecteditemString));
                    file.delete();
                    mAdapter.remove(selecteditem);
                    mAdapter.notifyDataSetChanged();



                    }
                }
                    mode.finish();


        }



        return false;

    }