0

In my app, information like file names are stored in the externally storage. They are then implemented into the app with the help of ListView. I can delete files individually with OnItemLongClickListener() but I want to select multiple files in ListView and then click a Delete button. How can I do this? My MainActivity file is below:

public class MainActivity extends AppCompatActivity {
ArrayList<FileName> filenames;
ListViewAdapter adapter;
ListView lv_filenames;
public Handler handler;
private String _path = Environment.getExternalStorageDirectory() + "/sample_directory/";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditorManager manager = new EditorManager(getApplicationContext());
    manager.CreateNewDirectory();
    lv_filenames = (ListView) findViewById(R.id.list);

    handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            filenames = manager.GetList();
            adapter = new ListViewAdapter(getApplicationContext(), R.layout.listView, filenames);
            lv_filenames.setAdapter(adapter);

    lv_filenames.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int file_name, long l) {
            final File deleteFile = new File(_path + filenames.get(file_name).getName());
            final String tempFileName = filenames.get(file_name).getName() + " is deleted";
            AlertDialog.Builder builder = new  AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Delete File");
            builder.setMessage("Do you really want to delete this file?");
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    boolean deleted = deleteFile.delete();
                    if (deleted) {
                        Toast.makeText(getApplicationContext(), tempFileName, Toast.LENGTH_SHORT).show();
                    }
                }
            });
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    // Do nothing.
                }
            });
            builder.create();
            AlertDialog dialog = builder.create();
            dialog.show();
            return false;
        }
    });
}
}

I deleted the extra code. Thanx for helping!

PS - I heard that in Android 4.4 + files can't be deleted like this. What should I do?

EDIT -
I have seen those answers. But I want to create a button on whose click the check/uncheck buttons would be available. How can I do that? I want the Check/Uncheck buttons to be visible only when I click delete button. Also the other answers are a bit confusing.

FadedCoder
  • 1,517
  • 1
  • 16
  • 36
  • possible duplicate of [delete multiple items in custom listview](http://stackoverflow.com/questions/16009209/delete-multiple-items-in-custom-listview) – Machado Aug 10 '15 at 12:27

2 Answers2

0

I would have a button with a edit or delete icon and have it change the ListView to one with checkboxes in each view. Either make a new ListView with a new Adapter or just tell adapter and set a boolean in it, and then dataSetChange the Adapter.

Daedalus
  • 255
  • 1
  • 2
  • 9
0

I fixed my problem. I use a SparseBooleanAdapter to register the delete options.Then I press delete button to delete them.

FadedCoder
  • 1,517
  • 1
  • 16
  • 36