2014-11-03 130 views
0

在我的应用程序中,我有一个列表视图,其中multichoicemodelistener启用。我想使用multichoicemodelistener删除内部存储文件(显示在我的列表视图中的文件)。但没有运气。android 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(字符串)不适用于参数(INT)

任何想法?

UPDATE 我已经编辑我的代码,所以知道它看起来像

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; 

    } 

我按下删除键后,文件(S)已经一去不复返了。但是,当我退出活动并返回活动时,所有已删除的文件都会回来。 文件是否未从内部存储器正确删除? 有人有建议吗?

+0

你已经调查什么.getCheckedItemPositions()主罚?和.keyAt(i)?请做。 – greenapps 2014-11-03 16:14:10

+0

我也试图用context.DeleteFile(项目)删除文件。但再次没有运气 – Thor1401 2014-11-03 18:13:32

回答

1

假设文件存在,看起来像您的代码将删除文件。您可以添加一条线以保证安全。

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

我认为实际的问题存在该文件实际上是删除here.Its可能的,但你是不是很快刷新listview.As为您删除的文件,在适配器中删除的项目,并更新列表视图。像这样:

 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(); 
+0

谢谢你的快速答案。但我认为代码有问题,应该删除选定的文件。因为当我使用以下代码时,应该显示敬酒。但没有显示吐司。 如果(请将isDeleted){ \t \t \t \t \t \t Toast.makeText(ShowListActivity.this,物品+ R.string.deleted,Toast.LENGTH_SHORT).show(); – Thor1401 2014-11-07 09:39:45

+0

我已将烤面包上移一行 – Meher 2014-11-07 18:43:53

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; 

    }