删除文件功能允许仅删除特定文件。如何使用switch语句适应ListView?

时间:2014-03-11 17:39:17

标签: java android listview switch-statement

我有一个列表视图,显示存储在内部存储器中的文件(文件显示时没有扩展名)。

我实施了OnItemLongClickListener和#34;切换"声明,允许用户从列表中删除他选择的文件。

不幸的是,我只能添加一个只能删除特定文件的功能。

我需要一个删除功能,可以删除列表中按下的文件。因为"切换方法"如果删除一个或多个文件,将位置更改为列表中的文件,这会使我的问题更糟糕!。

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

    }

}

    }

2 个答案:

答案 0 :(得分:0)

需要更多详细信息。

但看起来您应该将文件名传递给删除功能并使用它来创建文件引用。你说你没有显示文件扩展名。如果您知道它们都是相同的扩展名,则可以手动添加。如果没有,你将会搜索它。

答案 1 :(得分:0)

编写一个适用于File而不是String的自定义数组适配器,并触发特定File - 对象上的删除方法。覆盖适配器中的getView方法以显示没有扩展名的文件名。以this为例说明如何编写自定义适配器。你现在的方式,通过字符串,特别是行:

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

非常容易出错。而是在File对象上工作。我对你的switch语句感到困惑,它在那里没有意义。 (也许在学习编程时尝试其他事情?)