Android ListView实现单选及多选等功能示例
本文实例讲述了AndroidListView实现单选及多选等功能的方法。分享给大家供大家参考,具体如下:
在项目中也遇到过给ListView的item添加选择功能。比如一个网购APP,有个历史浏览页面,这个页面现点击item单选/多选及全选删除功能。
当时也是通过在数据中添加一个是否选择的字段来记录item的状态,然后根据这个字段有相应的position位置进行选择状态更改及删除操作。
刚刚看了AndroidAPIDemos中17种ListView的实现方法,发现ListView自身就带有我们所需要的单选,多选功能而且实现起来相当方便。
/**
*单选或多选功能ListView
*@description:
*@authorldm
*@date2016-4-21上午10:44:37
*/
publicclassSingleChoiceListextendsListActivity{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(newArrayAdapter(this,
android.R.layout.simple_list_item_single_choice,GENRES));
finalListViewlistView=getListView();
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//添加这一句话,就实现单选功能
//listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//添加这一句话,就实现多选功能
}
privatestaticfinalString[]GENRES=newString[]{
"Action","Adventure","Animation","Children","Comedy","Documentary","Drama",
"Foreign","History","Independent","Romance","Sci-Fi","Television","Thriller"
};
}
/**
*长按多选,添加了选择模式
*@description:
*@authorldm
*@date2016-4-21上午10:47:55
*/
publicclassChoiceModeListextendsListActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
ListViewlv=getListView();
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lv.setMultiChoiceModeListener(newModeCallback());
setListAdapter(newArrayAdapter(this,
android.R.layout.simple_list_item_checked,mStrings));
}
@Override
protectedvoidonPostCreate(BundlesavedInstanceState){
super.onPostCreate(savedInstanceState);
getActionBar().setSubtitle("Longpresstostartselection");
}
privateclassModeCallbackimplementsListView.MultiChoiceModeListener{
publicbooleanonCreateActionMode(ActionModemode,Menumenu){
MenuInflaterinflater=getMenuInflater();
inflater.inflate(R.menu.list_select_menu,menu);
mode.setTitle("SelectItems");
setSubtitle(mode);
returntrue;
}
publicbooleanonPrepareActionMode(ActionModemode,Menumenu){
returntrue;
}
publicbooleanonActionItemClicked(ActionModemode,MenuItemitem){
switch(item.getItemId()){
caseR.id.share:
Toast.makeText(ChoiceModeList.this,"Shared"+getListView().getCheckedItemCount()+
"items",Toast.LENGTH_SHORT).show();
mode.finish();
break;
default:
Toast.makeText(ChoiceModeList.this,"Clicked"+item.getTitle(),
Toast.LENGTH_SHORT).show();
break;
}
returntrue;
}
publicvoidonDestroyActionMode(ActionModemode){
}
publicvoidonItemCheckedStateChanged(ActionModemode,
intposition,longid,booleanchecked){
setSubtitle(mode);
}
privatevoidsetSubtitle(ActionModemode){
finalintcheckedCount=getListView().getCheckedItemCount();
switch(checkedCount){
case0:
mode.setSubtitle(null);
break;
case1:
mode.setSubtitle("Oneitemselected");
break;
default:
mode.setSubtitle(""+checkedCount+"itemsselected");
break;
}
}
}
privateString[]mStrings=Cheeses.sCheeseStrings;
}
当我们通过以上这些方法实现ListView选中之后,我们可以把对应的item位置记录下来,就可以对相应地数据进行操作了
/**
*带悬浮提示框的ListView
*
*@description:
*@authorldm
*@date2016-4-21上午10:55:51
*/
publicclassList9extendsListActivityimplementsListView.OnScrollListener{
privatefinalclassRemoveWindowimplementsRunnable{
publicvoidrun(){
removeWindow();
}
}
privateRemoveWindowmRemoveWindow=newRemoveWindow();
HandlermHandler=newHandler();
privateWindowManagermWindowManager;
privateTextViewmDialogText;
privatebooleanmShowing;
privatebooleanmReady;
privatecharmPrevLetter=Character.MIN_VALUE;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
mWindowManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
setListAdapter(newArrayAdapter(this,
android.R.layout.simple_list_item_1,mStrings));
getListView().setOnScrollListener(this);
LayoutInflaterinflate=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDialogText=(TextView)inflate.inflate(R.layout.list_position,null);
mDialogText.setVisibility(View.INVISIBLE);
mHandler.post(newRunnable(){
publicvoidrun(){
mReady=true;
WindowManager.LayoutParamslp=newWindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mWindowManager.addView(mDialogText,lp);
}
});
}
@Override
protectedvoidonResume(){
super.onResume();
mReady=true;
}
@Override
protectedvoidonPause(){
super.onPause();
removeWindow();
mReady=false;
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
mWindowManager.removeView(mDialogText);
mReady=false;
}
publicvoidonScroll(AbsListViewview,intfirstVisibleItem,
intvisibleItemCount,inttotalItemCount){
if(mReady){
charfirstLetter=mStrings[firstVisibleItem].charAt(0);
if(!mShowing&&firstLetter!=mPrevLetter){
mShowing=true;
mDialogText.setVisibility(View.VISIBLE);
}
mDialogText.setText(((Character)firstLetter).toString());
mHandler.removeCallbacks(mRemoveWindow);
mHandler.postDelayed(mRemoveWindow,3000);
mPrevLetter=firstLetter;
}
}
publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
}
privatevoidremoveWindow(){
if(mShowing){
mShowing=false;
mDialogText.setVisibility(View.INVISIBLE);
}
}
privateString[]mStrings=newString[]{"AbbayedeBelloc",
"AbbayeduMontdesCats","Abertam","Abondance","Ackawi",
"Acorn","Adelost","AffideliceauChablis","Afuega'lPitu",
"Airag","Airedale","AisyCendre","AllgauerEmmentaler",
"Alverca","Ambert","AmericanCheese","AmiduChambertin",
"BeenleighBlue","BeerCheese","BelPaese","Bergader",
"BergereBleue","Berkswell","BeyazPeynir","Bierkase",
"BishopKennedy","Blarney","Bleud'Auvergne","BleudeGex",
"BleudeLaqueuille","BleudeSeptmoncel","BleuDesCausses",
"Blue","BlueCastello","BlueRathgore","BlueVein(Australian)",
"BlueVeinCheeses","Bocconcini","Bocconcini(Australian)",
"BoerenLeidenkaas","Bonchester","Bosworth","Bougon",
"BouleDuRoves","Bouletted'Avesnes","Boursault","Boursin",
"Bouyssou","Bra","Braudostur","BreakfastCheese",
"BrebisduLavort","BrebisduLochois","BrebisduPuyfaucon",
"BresseBleu","Brick","Brie","BriedeMeaux","BriedeMelun",
"Brillat-Savarin","Brin","Brind'Amour","Brind'Amour",
"Brinza(BurdufBrinza)","BriquettedeBrebis",
"BriquetteduForez","Broccio","BroccioDemi-Affine",
"BrousseduRove","BruderBasil",
"BrusselaeKaas(FromagedeBruxelles)","Bryndza",
"Buchetted'Anjou","Buffalo","ChevrotindesAravis",
"Chontaleno","Civray","CoeurdeCamembertauCalvados",
"CoeurdeChevre","Colby","ColdPack","Comte","Coolea",
"Cooleney","Coquetdale","Corleggy","CornishPepper",
"Cotherstone","Cotija","CottageCheese",
"CottageCheese(Australian)","CougarGold","Coulommiers",
"Coverdale","CrayeuxdeRoncq","CreamCheese","CreamHavarti",
"CremaAgria","CremaMexicana","CremeFraiche","Crescenza",
"Croghan","CrottindeChavignol","CrottinduChavignol",
"Crowdie","Crowley","Cuajada","Curd","CureNantais",
"Curworthy","CwmtawePecorino","CypressGroveChevre",
"Danablu(DanishBlue)","Danbo","DanishFontina",
"Daralagjazsky","Dauphin","DelicedesFiouves",
"DenhanyDorsetDrum","Derby","DessertnyjBelyj","DevonBlue",
"DevonGarland","Dolcelatte","Doolin","Doppelrhamstufel",
"DorsetBlueVinney","DoubleGloucester","DoubleWorcester",
"DreuxalaFeuille","DryJack","Garrotxa","Gastanberra",
"Geitost","GippslandBlue","Gjetost","Gloucester",
"GoldenCross","Gorgonzola","Gornyaltajski","GospelGreen",
"Gouda","Goutu","Gowrie","Grabetto","Graddost",
"GraftonVillageCheddar","Grana","GranaPadano","GrandVatel",
"Gratarond'Areches","Gratte-Paille","Graviera","Greuilh",
"Greve","GrisdeLille","Gruyere","Gubbeen","Guerbigny",
"Halloumi","Halloumy(Australian)","Haloumi-StyleCheese",
"HarbourneBlue","Havarti","HeidiGruyere","HerefordHop",
"Herrgardsost","HerriotFarmhouse","Herve","HipiIti",
"HubbardstonBlueCow","Hushallsost","Iberico","IdahoGoatster",
"Idiazabal","IlBoschettoalTartufo","Iled'Yeu",
"IsleofMull","Jarlsberg","JermiTortes","JibnehArabieh",
"JindiBrie","JubileeBlue","Juustoleipa","Kadchgall","Kaseri",
"Kashta","Kefalotyri","Kenafa","Kernhem","KervellaAffine",
"Kikorangi","KingIslandCapeWickhamBrie","KingRiverGold",
"Klosterkaese","Knockalara","Kugelkase","MenallackFarmhouse",
"Menonita","MeredithBlue","Mesost","Metton(Cancoillotte)",
"MeyerVintageGouda","MihalicPeynir","Milleens","Mimolette",
"Mine-Gabhar","MiniBabyBells","Mixte","Molbo",
"MonasteryCheeses","Mondseer","MontD'orLyonnais","Montasio",
"MontereyJack","MontereyJackDry","Morbier",
"MorbierCrudeMontagne","MothaisalaFeuille","Mozzarella",
"Mozzarella(Australian)","MozzarelladiBufala",
"MozzarellaFresh,inwater","MozzarellaRolls","Munster",
"Murol","Mycella","Myzithra","PeekskillPyramid",
"PelardondesCevennes","PelardondesCorbieres","Penamellera",
"Penbryn","Pencarreg","PeraildeBrebis","PetitMorin",
"PetitPardou","Petit-Suisse","PicodondeChevre",
"PicosdeEuropa","Piora","PithtviersauFoin",
"PlateaudeHerve","PlymouthCheese","Podhalanski",
"Poivred'Ane","Polkolbin","Pontl'Eveque","PortNicholson",
"Port-Salut","Postel","Pouligny-Saint-Pierre","Pourly",
"Prastost","Pressato","Prince-Jean","ProcessedCheddar",
"Provolone","Provolone(Australian)","PyenganaCheddar",
"Pyramide","Quark","Quark(Australian)","QuartiroloLombardo",
"Quatre-Vents","QuercyPetit","QuesoBlanco",
"QuesoBlancoconFrutas--PinayMango","QuesodeMurcia",
"QuesodelMontsec","Saint-Marcellin","Saint-Nectaire",
"Saint-Paulin","Salers","Samso","SanSimon","Sancerre",
"SapSago","Sardo","SardoEgyptian","Sbrinz","Scamorza",
"Schabzieger","Schloss","SellessurCher","Selva","Serat",
"SeriouslyStrongCheddar","SerradaEstrela","Sharpam",
"ShelburneCheddar","ShropshireBlue","Siraz","Sirene",
"SmokedGouda","SomersetBrie","SonomaJack",
"SottocenarealTartufo","Soumaintrain","SourireLozerien",
"Spenwood","SraffordshireOrganic","St.AgurBlueCheese",
"Stilton","StinkingBishop","String","SussexSlipcote",
"Sveciaost","Swaledale","SweetStyleSwiss","Swiss",
"Syrian(ArmenianString)","Tala","Taleggio","Tamie",
"TasmaniaHighlandChevreLog","Taupiniere","Teifi","Telemea",
"Testouri","TetedeMoine","Tetilla","Venaco","Vendomois",
"VieuxCorse","Vignotte","Vulscombe","WaimataFarmhouseBlue",
"WashedRindCheese(Australian)","Waterloo","Weichkaese",
"Wellington","Wensleydale","WhiteStilton",
"ZanettiParmigianoReggiano"};
}
希望本文所述对大家Android程序设计有所帮助。