Creating a Contextual Batch Mode Menu with
a ListView in Android Studio(Java)
Step 1: Create a new project in Android Studio.
Step 2: Create the menu by creating a new file in res/ menu called contextual_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_move"
android:title="Move" />
<item android:id="@+id/menu_delete"
android:title="Delete" />
</menu>
Step 3: Create a new java file called MainActivity.java
import android.app.ListActivity;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
// App such as Gmail or a file browser, you've probably seen Contextual Mode when selecting multiple items
// Three key elements -
//1. Creating a Contextual Menu to inflate
//2. Defining MultiChoiceModeListener to pass to setMultiChoiceModeListener()
//3. Set ChoiceMode of the ListView to CHOICE_MODE_MULTIPLE_MODAL.
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Create a ListView populated with multiple country names to demonstrate multiple selections or batch mode.
String[] countries = new String[]{ "France",
"India", "Russia", "China","United Kingdom",
"United States"};
ListAdapter countryAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_activated_1, countries);
setListAdapter(countryAdapter);
//define MultiChoiceModeListener to handle batch mode with
//the ListView. We then set up the ListView to allow multiple selections and pass in the
//MultiChoiceModeListener
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
getListView().setMultiChoiceModeListener(mMultiChoiceModeListener);
getListView().setOnItemClickListener((parent, view, position, id) -> ((ListView) parent).setItemChecked(position,
true));
}
//Create a MultiChoiceModeListener to handle the Contextual Action Bar events
AbsListView.MultiChoiceModeListener
mMultiChoiceModeListener = new
AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.contextual_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Handle menu selections
switch (item.getItemId()) {
case R.id.menu_move:
Toast.makeText(MainActivity.this, "Move", Toast.LENGTH_SHORT).show();
mode.finish();
return true;
case R.id.menu_delete:
Toast.makeText(MainActivity.this, "Delete", Toast.LENGTH_SHORT).show();
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
};
}

0 Comments