2014-11-03 2 views
0

В моем приложении у меня есть Listview, где включен 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 (String) в контексте типа не применяется для аргументов (межд)

Любые идеи?

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; 

    } 

После нажатия кнопки удаления, файл (ы) ушел. Но когда я выхожу из работы и возвращаюсь к активности, все удаленные файлы возвращаются. Правильно ли удалены файлы из внутреннего хранилища? Есть ли у кого-то предложения?

+0

расследовали вы, что .getCheckedItemPositions() поставляет? И .keyAt (i)? Пожалуйста, сделай. – greenapps

+0

Я также пытался удалить файлы с context.DeleteFile (items). но снова не повезло – Thor1401

ответ

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

+0

Я переместил тост над одной строкой – Meher

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; 

    } 
Смежные вопросы