我有一个列表视图,显示存储在内部存储器中的文件(显示的文件没有扩展名)。
我已经实施了 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");
}
}
}
2条答案
按热度按时间vs3odd8k1#
需要更多的细节。
但看起来应该将文件名传递给delete函数,并使用该函数创建文件引用。你说你没有显示文件扩展名。如果知道它们都是相同的扩展名,可以手动添加。如果没有,你就得去搜。
slhcrj9b2#
编写一个在上工作的自定义阵列适配器
File
而不是String
并在特定的File
-对象。覆盖getView
方法来显示不带扩展名的文件名。以编写自定义适配器为例。你现在做的方式,用线,特别是线:很容易出错。工作在
File
对象。我对你的转换声明感到困惑,它在那里没有意义(也许在学习编程的同时尝试其他东西?)