как удалить элемент во внутреннем хранилище - PullRequest
2 голосов
/ 18 февраля 2012

привет всем, я создал класс, который сохраняет файл во внутреннем хранилище и отображает его в ListView. но моя проблема заключается в том, как удалить элемент? вот мой код

public void onClick(View arg0) {
                // TODO Auto-generated method stub
                String fileName = edFileName.getText().toString();
                String content = edContent.getText().toString();

                FileOutputStream fos;
                try {
                    fos = openFileOutput(fileName, Context.MODE_PRIVATE);
                    fos.write(content.getBytes());
                    fos.close();

                    Toast.makeText(
                            addThis.this, 
                            fileName + " saved", 
                            Toast.LENGTH_LONG).show();

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                ShowSavedFiles();

            }});
}
 void ShowSavedFiles(){
        SavedFiles = getApplicationContext().fileList();
        ArrayAdapter<String> adapter
        = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                SavedFiles);

        listSavedFiles.setAdapter(adapter);
    }

Ответы [ 3 ]

1 голос
/ 18 февраля 2012

Вы можете удалить файлы из Internal с помощью getFilesDir().listFiles(), который вернет вам массив файлов, присутствующих в вашей папке с файлами.

File[] files = getFilesDir().listFiles();

for (File file : files) {
    file.delete();
}

Если вы хотите удалить файл particular, вы можете получить name из file, compare и delete it.

if(file.getName().equals("xyz.extension"))
  file.delete();
1 голос
/ 18 февраля 2012

Вы, вероятно, должны создать и зарегистрировать (registerForContextMenu(MyListView)) контекстное меню в своей деятельности для своего ListView и реализовать удаление там.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.layout.menu, menu); //your xml menu 
    return true;
}

@Override
 public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
 super.onCreateContextMenu(menu, v, menuInfo);

     menu.add(0, v.getId(), 0, "Delete");
 }

@Override
public boolean onContextItemSelected(MenuItem item) {

       if(item.getTitle().equals("Delete")){
         TextView tv = (TextView)((RelativeLayout) ((AdapterView.AdapterContextMenuInfo)item.getMenuInfo()).targetView).getChildAt(0);
      //tv.getText(); will probably hold your filename
      //and just use the deleteFile() operations to remove it from the internal storage
       .............
       }

Прочтите это о том, как работать свнутренняя память http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

надеюсь, что это поможет abit

0 голосов
/ 14 ноября 2014

У меня была такая же проблема в моем мультивыборном моделе. Мне потребовалось некоторое время, чтобы несколько раз удалить мои файлы из списка (сохраненных во внутренней памяти)

Но вот мой код для удаления файлов внутреннего хранилища в multihoicemodelistener

 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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...