我正在创建一个应用程序,我可以在其中搜索文件并从SDCard中删除它们。一切正常,但我无法删除ListView
中检查过的文件。
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
convertView = inflater.inflate(R.layout.row, parent, false);
viewholder = new ViewHolder();
viewholder.checkbox = (CheckBox) convertView.findViewById(R.id.checkBox1);
viewholder.texview = (TextView) convertView.findViewById(R.id.textView1);
viewholder.texview.setText(modelItems.get(position));
viewholder.checkbox.setChecked(checkBoxState[position]);
viewholder.checkbox.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
// TODO: Implement this method
if (((CheckBox) p1).isChecked())
{
checkBoxState[position] = true;
filepath = modelItems.get(position);
}
else
{
checkBoxState[position] = false;
}
}
});
return convertView;
}
如何删除在ListView
中选择的文件并更新ListView
?
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
// TODO: Implement this method
switch (item.getItemId())
{
case R.id.select_all:
adapter.selectAll();
return true;
case R.id.deselect:
adapter.unSelectAll();
return true;
case R.id.delete:
adapter.delete();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
这是我尝试过的删除代码,我应该在这里应用哪些更改?
public void delete()
{
path = Environment.getExternalStorageDirectory().getAbsolutePath();
for (int i=0;i < checkBoxState.length;i++)
{
if (checkBoxState[i] == true)
{
File f = new File(path + "/" + filepath);
if (f != null && f.exists())
{
f.delete();
modelItems.remove(modelItems.get(i));
}
}
}
notifyDataSetChanged();
}
答案 0 :(得分:0)
试试这个。
library(ggplot2)
A=c(423,430,500,460,457,300,325,498,450,453,486,459)
B=c(300,325,356345,378,391,367)
# create a dataset for each vector
df_A = data.frame(value=A, id="A")
df_B = data.frame(value=B, id="B")
# combine datasets
df = rbind(df_A, df_B)
# create the box plot
ggplot(df, aes(id, value)) + geom_boxplot()
答案 1 :(得分:0)
在您的适配器类
中ArrayList<String> selectedFiles; // outside getView
public void resetSelectedItems()
{
selectedFiles.clear();
}
内部getView
viewholder.checkbox.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
// TODO: Implement this method
if (((CheckBox) p1).isChecked())
{
checkBoxState[position] = true;
filepath = modelItems.get(position);
selectedFiles.add(filepath);
}
else
{
checkBoxState[position] = false;
if(selectedFiles.contains(modelItems.get(position)){
selectedFiles.remove(modelItems.get(position));
}
}
}
});
并将功能删除为
public void delete()
{
path = Environment.getExternalStorageDirectory().getAbsolutePath();
for (int i=0;i < selectedFiles.size();i++)
{
File f = new File(selectedFiles.get(i)+ "/" + filepath);
if (f != null && f.exists())
{
f.delete();
modelItems.remove(modelItems.get(i));
}
}
resetSelectedItems();
notifyDataSetChanged();
}
试试这个。我希望你有EXTERNAL_STORAGE读写权限。并且不要忘记在适配器的构造函数中初始化selectedFiles
。
答案 2 :(得分:0)
我的问题几乎解决了,现在只剩下一件事,我无法通过文件路径,我的代码删除包含搜索字符串的所有文件 以下是我所做的更改
enter code here
public void delete()
{
for (int i=0;i < selectedFiles.size();i++)
{
String s= selectedFiles.get(i);
Log.d("selectedFiles.get(i)",""+s);
searchFileForDelete(s);
modelItems.remove(s);
}
resetSelectedItems();
notifyDataSetChanged();
}
public void displayDirectory(File dir)
{
File[] files = dir.listFiles();
for (File file : files)
{
allfiles.add(file.getAbsolutePath());
if (file.isDirectory())
{
displayDirectory(file);
allfiles.add(file.getAbsolutePath());
}
}
}
public void searchFileForDelete(String substring)
{
File f = new File(path);
displayDirectory(f);
String searchString = substring;
for(int i=0;i<allfiles.size();i++)
{
String tempVal = allfiles.get(i);
if(tempVal.contains(searchString))
{
Log.d("tempVal",""+tempVal);
File dlt = new File(tempVal);
if(dlt!=null && dlt.exists())
{
dlt.delete();
}
}
}
}