我有一个 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/