Android編程記錄ListView標(biāo)記行狀態(tài)的方法
本文實(shí)例講述了Android編程記錄ListView標(biāo)記行狀態(tài)的方法。分享給大家供大家參考,具體如下:
小Demo無什么特別之處,最特別的就是盡量少用notifyDataSetChanged,開銷太大了,當(dāng)然使用是會(huì)省不少工的,不過有時(shí)候還是會(huì)遇到別的問題的,項(xiàng)目經(jīng)驗(yàn)表示會(huì)有這個(gè)可能性的,廢話不多少了,直接上關(guān)鍵代碼。
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long arg3) {
/**
* 在ListView中,使用getChildAt(index)的取值,只能是當(dāng)前可見區(qū)域(列表可滾動(dòng))的子項(xiàng)!
1、所以如果想獲取前部的將會(huì)出現(xiàn)返回Null值問題;
2、getChildCount跟getCount獲取的值將會(huì)不一樣(數(shù)量多時(shí));
3、如果使用了getChildAt(index).findViewById(...)設(shè)置值的話,滾動(dòng)列表時(shí)值就會(huì)改變了。
需要使用getFirstVisiblePosition()獲得第一個(gè)可見的位置,在用當(dāng)前的position-getFirstVisiblePosition(),再用getChildAt取值!
* */
int now_pos = pos - adapterView.getFirstVisiblePosition();
View v = adapterView.getChildAt(now_pos);
ImageView imageView = (ImageView) v.findViewById(R.id.image);
if (imageView.getVisibility() == View.VISIBLE) {
imageView.setVisibility(View.GONE);
adapter.setState(pos,NONBIAOZHI);
}else{
imageView.setVisibility(View.VISIBLE);
adapter.setState(pos,BIAOZHI);
// getView調(diào)用,不過非常耗費(fèi)性能
// adapter.notifyDataSetChanged();
// 不使用notifyDataSetChanged,getView不會(huì)刷新,提高效率
refreshListView(pos, imageView);
}
}
public void refreshListView(int pos, ImageView imageView) {
if(pre != pos && !hasmap.isEmpty()){
ImageView image = (ImageView) hasmap.get(pre);
image.setVisibility(View.GONE);
hasmap.remove(pre);
}
pre = pos;
hasmap.put(pre, imageView);
}
上面的是在Activity的方法片段,下面的是BaseAdapter的方法片段:
// 設(shè)置標(biāo)記
public void setState(int pos,int state){
if(state == MainActivity.BIAOZHI){
// 每次點(diǎn)擊都清空列表,保持唯一選擇性
map.clear();
map.put(pos, 1);
}else{
map.remove(pos);
}
}
// 檢測(cè)標(biāo)記
public boolean getState(int p){
if (!map.isEmpty() && map.containsKey(p)) {
return true;
}else
return false;
}
getView代碼:
// 固定顯示標(biāo)記的行
if (getState(position)) {
holder.imageView.setVisibility(View.VISIBLE);
}else
holder.imageView.setVisibility(View.GONE);
附上項(xiàng)目下載,自己運(yùn)行就會(huì)得到標(biāo)題的效果。完整實(shí)例代碼代碼點(diǎn)擊此處本站下載。
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android系統(tǒng)更改狀態(tài)欄字體顏色
- Android編程實(shí)現(xiàn)檢測(cè)當(dāng)前電源狀態(tài)的方法
- Android編程實(shí)現(xiàn)獲取標(biāo)題欄、狀態(tài)欄的高度、屏幕大小及模擬Home鍵的方法
- android實(shí)現(xiàn)狀態(tài)欄添加圖標(biāo)的函數(shù)實(shí)例
- Android 讀取Properties配置文件的小例子
- android通過配置文件設(shè)置應(yīng)用安裝到SD卡上的方法
- AndroidManifest.xml配置文件解析
- Android獲取手機(jī)配置信息具體實(shí)現(xiàn)代碼
- Android編程之控件狀態(tài)配置文件實(shí)例
相關(guān)文章
android實(shí)現(xiàn)緩存圖片等數(shù)據(jù)
本文給大家分享的是Android采用LinkedHashMap自帶的LRU 算法緩存數(shù)據(jù)的方法和示例,有需要的小伙伴可以參考下。2015-07-07
Android Studio 運(yùn)行時(shí)出現(xiàn)的警告信息解決辦法
這篇文章主要介紹了Android Studio 運(yùn)行時(shí)出現(xiàn)的警告信息解決辦法的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android基于Glide v4.x的圖片加載進(jìn)度監(jiān)聽
本篇文章主要介紹了基于Glide v4.x的圖片加載進(jìn)度監(jiān)聽的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Android幀率監(jiān)測(cè)與優(yōu)化技巧
Android 應(yīng)用的性能優(yōu)化是開發(fā)過程中至關(guān)重要的一環(huán),而幀率(Frame Rate)是評(píng)估應(yīng)用性能的一個(gè)關(guān)鍵指標(biāo),在本文中,我們將深入探討如何監(jiān)測(cè) Android 應(yīng)用的幀率,以及如何通過代碼示例來優(yōu)化應(yīng)用的性能,需要的朋友可以參考下2023-10-10
Android 組合控件實(shí)現(xiàn)布局的復(fù)用的方法
本篇文章主要介紹了Android 組合控件實(shí)現(xiàn)布局的復(fù)用的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
android實(shí)現(xiàn)音樂跳動(dòng)效果的示例代碼
這篇文章主要介紹了android實(shí)現(xiàn)音樂跳動(dòng)效果的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Android實(shí)現(xiàn)輸入法彈出時(shí)把布局頂上去和登錄按鈕頂上去的解決方法
這篇文章主要介紹了Android實(shí)現(xiàn)輸入法彈出時(shí)把布局頂上去和登錄按鈕頂上去的解決方法,需要的朋友可以參考下2017-11-11
android自定義View實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
這篇文章主要為大家詳細(xì)介紹了android自定義View實(shí)現(xiàn)簡(jiǎn)單五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android開發(fā)之滑動(dòng)數(shù)值選擇器NumberPicker用法示例
這篇文章主要介紹了Android開發(fā)之滑動(dòng)數(shù)值選擇器NumberPicker用法,結(jié)合實(shí)例形式分析了Android滑動(dòng)數(shù)值選擇器NumberPicker的功能、相關(guān)函數(shù)、事件監(jiān)聽、界面布局等操作技巧,需要的朋友可以參考下2019-03-03

