Java 使切换方法适应删除手机内存中文件的列表视图
我有一个listview,它显示存储在手机内存中的文件列表(不带文件扩展名)。 然后,我实现了允许用户删除文件的Java 使切换方法适应删除手机内存中文件的列表视图,java,android,listview,Java,Android,Listview,我有一个listview,它显示存储在手机内存中的文件列表(不带文件扩展名)。 然后,我实现了允许用户删除文件的OnItemLongClickListener OnItemLongClickListener使用“switch”语句 因为每次删除文件时列表视图中项目的位置都会改变,所以我想实现一个规则,检查文件名是否与相关文件匹配,无论在案例0、案例1等中是否移动文件名 要明确的是: 初始列表视图: switch Listview items relate
OnItemLongClickListener
OnItemLongClickListener
使用“switch”语句
因为每次删除文件时列表视图中项目的位置都会改变,所以我想实现一个规则,检查文件名是否与相关文件匹配,无论在案例0、案例1等中是否移动文件名
要明确的是:
初始列表视图:
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新手,我不知道如何解决这个问题
有人能帮我吗
这就是活动
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");
}
}
}
公共类MainActivity扩展活动{
ListView lv;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
File dir=新文件(Environment.getExternalStorageDirectory().getPath()+“/osmdroid/tiles/”;
File[]filelist=dir.listFiles();
String[]theNamesOfFiles=新字符串[filelist.length];
对于(int i=0;i
删除项目时,也将其从阵列中删除,然后在更新阵列项目后在适配器上调用notifyDataSetChange()
无需检查姓名。您可以按职位进行操作我会这样做: 首先,我将有一个关于项目的数据结构
public class MyFile {
File file;
String fileName;
public MyFile(File file)
{
this.file = file;
this.fileName = file.getName();
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
}
@Override
public String toString() {
return this.fileName;
}
}
toString()
方法很重要。该方法在数组适配器的列表视图中提供文本
然后我会像这样初始化适配器
adapter = new ArrayAdapter<MyFile>(this, R.layout.list_row, arrayOfMyFileObjects);
然后您可以使用deleteFile(item.file)进行删除代码>
我认为下面的代码应该可以做到这一点
public class MainActivity extends Activity {
ListView lv;
ArrayAdapter<MyFile> adapter;
public void list() {
lv = (ListView) findViewById(R.id.listView1);
File dir = new File(Environment.getExternalStorageDirectory().getPath()
+ "/osmdroid/tiles/");
File[] filelist = dir.listFiles();
ArrayList<MyFile> theNamesOfFiles = new ArrayList<MyFile>();
for (File temp : filelist) {
theNamesOfFiles.add(new MyFile(temp));
}
Collections.sort(theNamesOfFiles, new Comparator<MyFile>() {
@Override
public int compare(MyFile lhs, MyFile rhs) {
return lhs.toString().compareToIgnoreCase(rhs.toString());
}
});
adapter = new ArrayAdapter<MyFile>(this, R.layout.list_row,
theNamesOfFiles);
lv.setAdapter(adapter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
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) {
doDeleteFile(adapter.getItem(position).file);
return true;
}
});
}
public void doDeleteFile(File fileToDelete) {
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");
}
}
public class MyFile {
File file;
String fileName;
public MyFile(File file)
{
this.file = file;
this.fileName = file.getName();
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
}
@Override
public String toString() {
return this.fileName;
}
}
公共类MainActivity扩展活动{
ListView lv;
阵列适配器;
公众作废清单(){
lv=(ListView)findViewById(R.id.listView1);
File dir=新文件(Environment.getExternalStorageDirectory().getPath())
+“/osmdroid/tiles/”;
File[]filelist=dir.listFiles();
ArrayList theNamesOfFiles=新建ArrayList();
用于(文件临时:文件列表){
添加(新的MyFile(temp));
}
Collections.sort(theNamesOfFiles,newcomparator(){
@凌驾
公共整数比较(MyFile lhs、MyFile rhs){
返回lhs.toString().compareToIgnoreCase(rhs.toString());
}
});
适配器=新阵列适配器(此,R.layout.list_行,
名称(文件);
低压设置适配器(适配器);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
list();
lv.setOnItemLongClickListener(新的OnItemLongClickListener(){
//设置onItemLongClickListener并将位置传递给
//作用
@凌驾
长单击(AdapterView arg0、视图arg1、,
整数位置,长arg3){
DodeletFile(adapter.getItem(position.file);
返回true;
}
});
}
公共void dodeletfile(文件fileToDelete){
如果(!fileToDelete.isDirectory()){
试一试{
if(fileToDelete.delete()){
System.out.println(“文件删除操作成功”);
}
否则{
System.out.println(“文件删除操作失败”);
}
}捕获(例外情况除外){
System.out.println(“异常:+ex.getMessage());
}
}否则{
System.out.println(“它不是一个文件”);
}
}
公共类MyFile{
文件;
字符串文件名;
公共MyFile(文件)
{
this.file=文件;
this.fileName=file.getName();
fileName=fileName.substring(0,fileName.lastIndexOf('.');
}
@凌驾
公共字符串toS
public class MainActivity extends Activity {
ListView lv;
ArrayAdapter<MyFile> adapter;
public void list() {
lv = (ListView) findViewById(R.id.listView1);
File dir = new File(Environment.getExternalStorageDirectory().getPath()
+ "/osmdroid/tiles/");
File[] filelist = dir.listFiles();
ArrayList<MyFile> theNamesOfFiles = new ArrayList<MyFile>();
for (File temp : filelist) {
theNamesOfFiles.add(new MyFile(temp));
}
Collections.sort(theNamesOfFiles, new Comparator<MyFile>() {
@Override
public int compare(MyFile lhs, MyFile rhs) {
return lhs.toString().compareToIgnoreCase(rhs.toString());
}
});
adapter = new ArrayAdapter<MyFile>(this, R.layout.list_row,
theNamesOfFiles);
lv.setAdapter(adapter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
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) {
doDeleteFile(adapter.getItem(position).file);
return true;
}
});
}
public void doDeleteFile(File fileToDelete) {
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");
}
}
public class MyFile {
File file;
String fileName;
public MyFile(File file)
{
this.file = file;
this.fileName = file.getName();
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
}
@Override
public String toString() {
return this.fileName;
}
}