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程序设计有所帮助。