2014-11-03 160 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; 

    } 
相關問題