Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使切换方法适应删除手机内存中文件的列表视图_Java_Android_Listview - Fatal编程技术网

Java 使切换方法适应删除手机内存中文件的列表视图

Java 使切换方法适应删除手机内存中文件的列表视图,java,android,listview,Java,Android,Listview,我有一个listview,它显示存储在手机内存中的文件列表(不带文件扩展名)。 然后,我实现了允许用户删除文件的OnItemLongClickListener OnItemLongClickListener使用“switch”语句 因为每次删除文件时列表视图中项目的位置都会改变,所以我想实现一个规则,检查文件名是否与相关文件匹配,无论在案例0、案例1等中是否移动文件名 要明确的是: 初始列表视图: switch Listview items relate

我有一个listview,它显示存储在手机内存中的文件列表(不带文件扩展名)。 然后,我实现了允许用户删除文件的
OnItemLongClickListener

OnItemLongClickListener
使用“switch”语句

因为每次删除文件时列表视图中项目的位置都会改变,所以我想实现一个规则,检查文件名是否与相关文件匹配,无论在案例0、案例1等中是否移动文件名

要明确的是:

初始列表视图:

    switch          Listview items         related file to delete
    case 0;               A                          A.map
    case 1;               B                          B.map
    case 2;               C                          C.map
    case 3;               D                          D.map
删除B后的Listview:

    switch          Listview items         related file to delete
    case 0;               A                          A.map
    case 1;               C                          C.map
    case 2;               D                          
现在,如果我之前在案例1中写过一条规则,删除B.map,它可以正常工作。 但现在C项具有与案例1相同的规则,并且规则不匹配

因为我是android新手,我不知道如何解决这个问题

有人能帮我吗

这就是活动

    public class MainActivity extends Activity {

ListView lv;
ArrayAdapter<String> adapter;


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

    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);

    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() + "/osmdroid/tiles/", "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");

    }

}

}
公共类MainActivity扩展活动{
ListView lv;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
File dir=新文件(Environment.getExternalStorageDirectory().getPath()+“/osmdroid/tiles/”;
File[]filelist=dir.listFiles();
String[]theNamesOfFiles=新字符串[filelist.length];
对于(int i=0;i
删除项目时,也将其从阵列中删除,然后在更新阵列项目后在适配器上调用notifyDataSetChange()


无需检查姓名。您可以按职位进行操作

我会这样做:

首先,我将有一个关于项目的数据结构

public class MyFile {
    File file;
    String fileName;

    public MyFile(File file)
    {
        this.file = file;
        this.fileName = file.getName();
        fileName = fileName.substring(0, fileName.lastIndexOf('.'));
    }

    @Override
    public String toString() {
        return this.fileName;
    }
}
toString()
方法很重要。该方法在
数组适配器的
列表视图中提供文本

然后我会像这样初始化适配器

adapter = new ArrayAdapter<MyFile>(this, R.layout.list_row, arrayOfMyFileObjects);
然后您可以使用
deleteFile(item.file)进行删除

我认为下面的代码应该可以做到这一点

public class MainActivity extends Activity {

ListView lv;
ArrayAdapter<MyFile> adapter;

public void list() {

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

    File dir = new File(Environment.getExternalStorageDirectory().getPath()
            + "/osmdroid/tiles/");
    File[] filelist = dir.listFiles();
    ArrayList<MyFile> theNamesOfFiles = new ArrayList<MyFile>();
    for (File temp : filelist) {
        theNamesOfFiles.add(new MyFile(temp));
    }
    Collections.sort(theNamesOfFiles, new Comparator<MyFile>() {

        @Override
        public int compare(MyFile lhs, MyFile rhs) {
            return lhs.toString().compareToIgnoreCase(rhs.toString());
        }
    });
    adapter = new ArrayAdapter<MyFile>(this, R.layout.list_row,
            theNamesOfFiles);

    lv.setAdapter(adapter);
}

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

    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) {

            doDeleteFile(adapter.getItem(position).file);

            return true;
        }
    });
}

public void doDeleteFile(File fileToDelete) {
    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");

    }

}

public class MyFile {
    File file;
    String fileName;

    public MyFile(File file)
    {
        this.file = file;
        this.fileName = file.getName();
        fileName = fileName.substring(0, fileName.lastIndexOf('.'));
    }

    @Override
    public String toString() {
        return this.fileName;
    }
}
公共类MainActivity扩展活动{
ListView lv;
阵列适配器;
公众作废清单(){
lv=(ListView)findViewById(R.id.listView1);
File dir=新文件(Environment.getExternalStorageDirectory().getPath())
+“/osmdroid/tiles/”;
File[]filelist=dir.listFiles();
ArrayList theNamesOfFiles=新建ArrayList();
用于(文件临时:文件列表){
添加(新的MyFile(temp));
}
Collections.sort(theNamesOfFiles,newcomparator(){
@凌驾
公共整数比较(MyFile lhs、MyFile rhs){
返回lhs.toString().compareToIgnoreCase(rhs.toString());
}
});
适配器=新阵列适配器(此,R.layout.list_行,
名称(文件);
低压设置适配器(适配器);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
list();
lv.setOnItemLongClickListener(新的OnItemLongClickListener(){
//设置onItemLongClickListener并将位置传递给
//作用
@凌驾
长单击(AdapterView arg0、视图arg1、,
整数位置,长arg3){
DodeletFile(adapter.getItem(position.file);
返回true;
}
});
}
公共void dodeletfile(文件fileToDelete){
如果(!fileToDelete.isDirectory()){
试一试{
if(fileToDelete.delete()){
System.out.println(“文件删除操作成功”);
}
否则{
System.out.println(“文件删除操作失败”);
}
}捕获(例外情况除外){
System.out.println(“异常:+ex.getMessage());
}
}否则{
System.out.println(“它不是一个文件”);
}
}
公共类MyFile{
文件;
字符串文件名;
公共MyFile(文件)
{
this.file=文件;
this.fileName=file.getName();
fileName=fileName.substring(0,fileName.lastIndexOf('.');
}
@凌驾
公共字符串toS
public class MainActivity extends Activity {

ListView lv;
ArrayAdapter<MyFile> adapter;

public void list() {

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

    File dir = new File(Environment.getExternalStorageDirectory().getPath()
            + "/osmdroid/tiles/");
    File[] filelist = dir.listFiles();
    ArrayList<MyFile> theNamesOfFiles = new ArrayList<MyFile>();
    for (File temp : filelist) {
        theNamesOfFiles.add(new MyFile(temp));
    }
    Collections.sort(theNamesOfFiles, new Comparator<MyFile>() {

        @Override
        public int compare(MyFile lhs, MyFile rhs) {
            return lhs.toString().compareToIgnoreCase(rhs.toString());
        }
    });
    adapter = new ArrayAdapter<MyFile>(this, R.layout.list_row,
            theNamesOfFiles);

    lv.setAdapter(adapter);
}

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

    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) {

            doDeleteFile(adapter.getItem(position).file);

            return true;
        }
    });
}

public void doDeleteFile(File fileToDelete) {
    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");

    }

}

public class MyFile {
    File file;
    String fileName;

    public MyFile(File file)
    {
        this.file = file;
        this.fileName = file.getName();
        fileName = fileName.substring(0, fileName.lastIndexOf('.'));
    }

    @Override
    public String toString() {
        return this.fileName;
    }
}