delete file函数只允许删除特定的文件如何适应带有switch语句的listview?

h6my8fg2  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(426)

我有一个列表视图,显示存储在内部存储器中的文件(显示的文件没有扩展名)。
我已经实施了 OnItemLongClickListener 使用“switch”语句,允许用户从列表中删除自己选择的文件。
不幸的是,我只能添加一个只能删除特定文件的函数。
我需要一个删除功能,可以删除列表中按下的文件。由于“切换方法”在删除一个或多个文件时会将位置更改为列表中的文件,这使我的问题变得更糟!。
主活动.java

  1. import java.io.File;
  2. import java.util.Arrays;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.Environment;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.AdapterView.OnItemLongClickListener;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.ListView;
  11. public class MainActivity extends Activity {
  12. ListView lv;
  13. ArrayAdapter<String> adapter;
  14. public void list(){
  15. lv = (ListView) findViewById(R.id.listView1);
  16. File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/osmdroid/tiles/");
  17. File[] filelist = dir.listFiles();
  18. String[] theNamesOfFiles = new String[filelist.length];
  19. for (int i = 0; i < theNamesOfFiles.length; i++) {
  20. String temp = filelist[i].getName();
  21. theNamesOfFiles[i] = temp.substring(0, temp.lastIndexOf('.'));
  22. }
  23. Arrays.sort(theNamesOfFiles);
  24. adapter = new ArrayAdapter<String>(this, R.layout.list_row, theNamesOfFiles);
  25. lv.setAdapter(adapter);
  26. }
  27. @Override
  28. protected void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_main);
  31. list();
  32. lv.setOnItemLongClickListener(new OnItemLongClickListener() {
  33. // setting onItemLongClickListener and passing the position to the function
  34. @Override
  35. public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
  36. int position, long arg3) {
  37. switch(position){
  38. case 0:{
  39. }
  40. break;
  41. case 1:{
  42. }
  43. break;
  44. case 2:{
  45. }
  46. break;
  47. case 3:{
  48. }
  49. break;
  50. case 4:{
  51. }
  52. break;
  53. }
  54. return true;
  55. }
  56. });
  57. }
  58. public void doDeleteFile(int position){
  59. File fileToDelete = new File(Environment.getExternalStorageDirectory().getPath() + "/path/", "A.map");
  60. if(!fileToDelete.isDirectory()){
  61. try{
  62. if(fileToDelete.delete()){
  63. System.out.println("File delete operation success");
  64. }
  65. else{
  66. System.out.println("File delete operation failed");
  67. }
  68. }catch(Exception ex){
  69. System.out.println("Exception :"+ex.getMessage());
  70. }
  71. }else{
  72. System.out.println("It is not a file");
  73. }
  74. }
  75. }
vs3odd8k

vs3odd8k1#

需要更多的细节。
但看起来应该将文件名传递给delete函数,并使用该函数创建文件引用。你说你没有显示文件扩展名。如果知道它们都是相同的扩展名,可以手动添加。如果没有,你就得去搜。

slhcrj9b

slhcrj9b2#

编写一个在上工作的自定义阵列适配器 File 而不是 String 并在特定的 File -对象。覆盖 getView 方法来显示不带扩展名的文件名。以编写自定义适配器为例。你现在做的方式,用线,特别是线:

  1. File fileToDelete = new File(Environment.getExternalStorageDirectory().getPath() + "/path/", "A.map")

很容易出错。工作在 File 对象。我对你的转换声明感到困惑,它在那里没有意义(也许在学习编程的同时尝试其他东西?)

相关问题