1045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne/* 2045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * Copyright (C) 2010 The Android Open Source Project 3045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * 4045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * Licensed under the Apache License, Version 2.0 (the "License"); 5045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * you may not use this file except in compliance with the License. 6045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * You may obtain a copy of the License at 7045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * 8045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * http://www.apache.org/licenses/LICENSE-2.0 9045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * 10045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * Unless required by applicable law or agreed to in writing, software 11045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * distributed under the License is distributed on an "AS IS" BASIS, 12045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * See the License for the specific language governing permissions and 14045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * limitations under the License. 15045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne */ 16045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunnepackage com.example.android.apis.view; 17045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 18045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport com.example.android.apis.R; 19045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 20045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.app.ListActivity; 21045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.os.Bundle; 22045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.ActionMode; 23045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.Menu; 24045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.MenuInflater; 25045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.view.MenuItem; 26045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.widget.ArrayAdapter; 27045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.widget.ListView; 28045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunneimport android.widget.Toast; 29045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 30045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne/** 31045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne * This demo illustrates the use of CHOICE_MODE_MULTIPLE_MODAL, a.k.a. selection mode on ListView 328fc1811242f98370c1e5882f7a7f8135198cd242Dianne Hackborn * couple with the new simple_list_item_activated_1 which uses a highlighted border for selected 338fc1811242f98370c1e5882f7a7f8135198cd242Dianne Hackborn * items. 34045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne */ 35045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunnepublic class List16 extends ListActivity { 36045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne @Override 37045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne protected void onCreate(Bundle savedInstanceState) { 38045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne super.onCreate(savedInstanceState); 39045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne ListView lv = getListView(); 40045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 41045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne lv.setMultiChoiceModeListener(new ModeCallback()); 42045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne setListAdapter(new ArrayAdapter<String>(this, 43b39c4ba316a523e4ecf0ac9e71377b8c5b35c25cJeff Brown android.R.layout.simple_list_item_activated_1, Cheeses.sCheeseStrings)); 44045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 45045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 46045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne @Override 47045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne protected void onPostCreate(Bundle savedInstanceState) { 48045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne super.onPostCreate(savedInstanceState); 49045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne getActionBar().setSubtitle("Long press to start selection"); 50045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 51045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 52045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne private class ModeCallback implements ListView.MultiChoiceModeListener { 53045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 54045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne public boolean onCreateActionMode(ActionMode mode, Menu menu) { 55045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne MenuInflater inflater = getMenuInflater(); 56045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne inflater.inflate(R.menu.list_select_menu, menu); 57045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne mode.setTitle("Select Items"); 58045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne return true; 59045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 60045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 61045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 62045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne return true; 63045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 64045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 65045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 66045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne switch (item.getItemId()) { 67045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne case R.id.share: 68045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne Toast.makeText(List16.this, "Shared " + getListView().getCheckedItemCount() + 69045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne " items", Toast.LENGTH_SHORT).show(); 70045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne mode.finish(); 71045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne break; 72045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne default: 73045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne Toast.makeText(List16.this, "Clicked " + item.getTitle(), 74045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne Toast.LENGTH_SHORT).show(); 75045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne break; 76045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 77045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne return true; 78045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 79045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 80045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne public void onDestroyActionMode(ActionMode mode) { 81045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 82045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 83045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne public void onItemCheckedStateChanged(ActionMode mode, 84045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne int position, long id, boolean checked) { 85045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne final int checkedCount = getListView().getCheckedItemCount(); 86045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne switch (checkedCount) { 87045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne case 0: 88045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne mode.setSubtitle(null); 89045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne break; 90045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne case 1: 91045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne mode.setSubtitle("One item selected"); 92045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne break; 93045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne default: 94045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne mode.setSubtitle("" + checkedCount + " items selected"); 95045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne break; 96045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 97045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 98045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne 99045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne } 100045eac4208defd189fecf918d58a15d4b7142c59Gilles Debunne} 101