在我的应用程序中,我有一个Listview,其中启用了multichoicemodelistener。我想使用multichoicemodelistener删除内部存储文件(列表视图中显示的文件)。但没有运气。
这是我的代码
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.list_context_delte:
SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions();
for(int i = sparseBooleanArray.size() -1; i >= 0; i--)
context.deleteFile(sparseBooleanArray.keyAt(i));
mAdapter.notifyDataSetChanged();
mode.finish();
Toast.makeText(ShowListActivity.this, R.string.deleted, Toast.LENGTH_SHORT).show();
mode.finish();
}
return false;
}
我收到一条错误消息:上下文类型中的方法deleteFile(String)不适用于参数(int)
有什么想法吗?
更新 我编辑了我的代码,所以知道它看起来像
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.list_context_delte:
nr = 0;
SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions();
for(int i = sparseBooleanArray.size() -1; i >= 0; i--)
if (sparseBooleanArray.get(i)) {
String items = getListView().getAdapter().getItem(sparseBooleanArray.keyAt(i)).toString();
File dir = getFilesDir();
File file = new File(dir, (items));
file.delete();
RowItem selecteditem = mAdapter.getItem(sparseBooleanArray.keyAt(i));
mAdapter.remove(selecteditem);
mAdapter.notifyDataSetChanged();
Toast.makeText(ShowListActivity.this,items+ R.string.deleted, Toast.LENGTH_SHORT).show();
}
mode.finish();
}
return false;
}
按下删除按钮后,文件消失了。但是当我退出活动并返回活动时,所有已删除的文件都会恢复。 文件是否未从内部存储中正确删除? 有人有建议吗?
答案 0 :(得分:1)
假设文件存在,看起来您的代码将删除该文件。您可以添加一行以确保安全。
if(file.exists()){
boolean isDeleted = file.delete();
Log.v(TAG,"file delection is success : "+isDeleted);
}
我认为这里存在实际问题。实际上可能删除了文件,但是你没有刷新listview。一旦删除文件,删除适配器中的项目并更新列表视图。就像这样: / p>
for(int i = sparseBooleanArray.size() -1; i >= 0; i--)
if (sparseBooleanArray.get(i)) {
String items = getListView().getAdapter().getItem(sparseBooleanArray.keyAt(i)).toString();
File dir = getFilesDir();
File file = new File(dir, (items));
boolean isDeleted = file.delete();
if(isDeleted){
mAdapter.deleteItem(items); // create a method in adapter which will delete the item.
mAdapter.notifyDataSetChanged();
Toast.makeText(ShowListActivity.this,items+ R.string.deleted, Toast.LENGTH_SHORT).show();
}
}
mode.finish();
答案 1 :(得分:0)
我终于明白了。 我的代码知道如下所示,它完美地删除了内部存储文件
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.list_context_delte:
nr = 0;
SparseBooleanArray sparseBooleanArray = getListView().getCheckedItemPositions();
for(int i = sparseBooleanArray.size() -1; i >= 0; i--) {
if (sparseBooleanArray.get(i)) {
RowItem selecteditem = mAdapter.getItem(sparseBooleanArray.keyAt(i));
String selecteditemString = selecteditem.getFilename().toString();
File dir = getFilesDir();
File file = new File(dir, (selecteditemString));
file.delete();
mAdapter.remove(selecteditem);
mAdapter.notifyDataSetChanged();
}
}
mode.finish();
}
return false;
}