如何删除内部存储中的项目

时间:2012-02-18 01:19:47

标签: android android-listview

大家好我已经创建了一个在内部存储中保存文件并在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 个答案:

答案 0 :(得分:1)

您应该在活动中为ListView创建并注册(registerForContextMenu(MyListView))上下文菜单,并在那里实现删除。

@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

希望它有助于升技

答案 1 :(得分:1)

您可以使用getFilesDir().listFiles()从内部删除文件,这将返回您的文件夹中存在的文件数组。

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

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

如果您要删除particular文件,可以获取namefilecompare的{​​{1}}。

delete

答案 2 :(得分:0)

我在multichoicemodelistener中遇到了同样的问题。 我花了一些时间来多次删除listview中的文件(保存在内部存储中)

但这是我在multichoicemodelistener中删除内部存储文件的代码

 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;

    }