如何从menuInflater中删除listview的文件

时间:2017-12-16 09:31:23

标签: android listview checkbox

我正在创建一个应用程序,我可以在其中搜索文件并从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();
}     

3 个答案:

答案 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();
            }
        }
    }
}