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

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

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

import java.io.File;
    import java.util.Arrays;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemLongClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    public class MainActivity extends Activity {

ListView lv;
ArrayAdapter<String> adapter;

public void list(){

    lv = (ListView) findViewById(R.id.listView1);

    File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/osmdroid/tiles/");
    File[] filelist = dir.listFiles();
    String[] theNamesOfFiles = new String[filelist.length];
    for (int i = 0; i < theNamesOfFiles.length; i++) {

        String temp = filelist[i].getName();
       theNamesOfFiles[i] = temp.substring(0, temp.lastIndexOf('.'));

    }
    Arrays.sort(theNamesOfFiles);
    adapter = new ArrayAdapter<String>(this, R.layout.list_row, theNamesOfFiles);

    lv.setAdapter(adapter);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    list();

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        // setting onItemLongClickListener and passing the position to the function
                  @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int position, long arg3) {

                      switch(position){

                      case 0:{

                      }
                      break;

                      case 1:{

                          }
                          break;

                      case 2:{    

                          }
                          break;

                      case 3:{

                          }
                          break;

                      case 4:{

                          }

                          break;
                      }
            return true;
        }
    });
}

public void doDeleteFile(int position){

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

    if(!fileToDelete.isDirectory()){

        try{
            if(fileToDelete.delete()){  

                System.out.println("File delete operation success");
            }

            else{
                System.out.println("File delete operation failed");
            }
        }catch(Exception ex){
            System.out.println("Exception :"+ex.getMessage());
        }

    }else{

        System.out.println("It is  not a file");

    }

}

    }
vs3odd8k

vs3odd8k1#

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

slhcrj9b

slhcrj9b2#

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

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

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

相关问题