我有一个列表视图,显示存储在内部存储器中的文件(文件显示时没有扩展名)。
我实施了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");
}
}
}
答案 0 :(得分:0)
需要更多详细信息。
但看起来您应该将文件名传递给删除功能并使用它来创建文件引用。你说你没有显示文件扩展名。如果您知道它们都是相同的扩展名,则可以手动添加。如果没有,你将会搜索它。
答案 1 :(得分:0)
编写一个适用于File
而不是String
的自定义数组适配器,并触发特定File
- 对象上的删除方法。覆盖适配器中的getView
方法以显示没有扩展名的文件名。以this为例说明如何编写自定义适配器。你现在的方式,通过字符串,特别是行:
File fileToDelete = new File(Environment.getExternalStorageDirectory().getPath() + "/path/", "A.map")
非常容易出错。而是在File
对象上工作。我对你的switch语句感到困惑,它在那里没有意义。 (也许在学习编程时尝试其他事情?)