java - 修改listView的switch方法,删除手机内存中的文件

标签 java android listview

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

OnItemLongClickListener 与“switch”语句配合使用。

因为每次删除文件时 ListView 中的项目位置都会发生变化,所以我想实现一个规则来检查文件名是否与相关文件匹配,无论文件名是否为移动到案例 0、案例 1 等。

需要明确的是:

初始 ListView :

    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新手,所以我不知道如何解决这个问题。

有人可以帮助我吗?

这是 Activity

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

    }

}

}

最佳答案

当您删除项目时,也将其从数组中删除,然后在更新数组项目后在适配器中调用notifyDataSetChanged()

无需检查姓名,按职位即可

关于java - 修改listView的switch方法,删除手机内存中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326081/

相关文章:

java - 检查Java中字符串中特定符号的特殊排列

java - Spring mvc servlet url 未正确映射

android - 如何在多个 fragment 中处理相同的 onClick 操作而不重复代码?

android - 如何发送短信回复到邮箱地址?

c# - Xamarin listView 中的绑定(bind)颜色

java - 在 T Callable Class 的 call 方法中实例化一个类

java - 使用 Java 监视 tcpflow 输出?

java - Lua 在 Android 上是否与 Java 一样强大,或者有什么限制?

java - 带有图像 JavaFX 的 ListView

c# - Listview中的ListView-选择子级时未设置父级的SelectedIndex