最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Android中適配器的notifyDataSetChanged()為何有時(shí)不刷新

 更新時(shí)間:2020年07月24日 08:40:53   作者:bddylww  
這篇文章主要介紹了淺談Android中適配器的notifyDataSetChanged()為何有時(shí)不刷新,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

學(xué)過Android開發(fā)的人都知道,ListView控件在開發(fā)中經(jīng)常遇到,并且ListView通常結(jié)合Adapter適配器來進(jìn)行數(shù)據(jù)顯示和數(shù)據(jù)更新操作。姑且假設(shè)數(shù)據(jù)存儲(chǔ)在名為dataList的成員變量中。數(shù)據(jù)操作無非是增加數(shù)據(jù)、刪除數(shù)據(jù)這兩種主要的操作,而當(dāng)數(shù)據(jù)有所變化時(shí),為了及時(shí)向用戶提供更新后的數(shù)據(jù),我們知道需要在數(shù)據(jù)更新后調(diào)用適配器的notifyDataSetChanged()方法,來顯示更新后的數(shù)據(jù)。殊不知,該方法并非百試不爽,在此我們便來討論下具體的原因,其實(shí)本質(zhì)是關(guān)注內(nèi)存的分配情況。 先來看幾段代碼。

代碼段1(某Activity中):

private List<Map<String,String>> dataList;
private ListView listView;
private ListAdapter adapter;

listView = findViewById(R.id.mancard);
adapter = new ListAdapter(this, dataList);
listView.setAdapter(adapter);

上述代碼是把Adapter適配器和ListView控件進(jìn)行綁定。

代碼段2(ListAdapter中的部分代碼):

public class ListAdapter extends BaseAdapter{
private Context context;
private List<ArrayList> list;

ListAdapter(Context context, List list){
    this.context = context;
    this.list = list;
}
@Override
public Object getItem(int position) {
    return list.get(position);
}

上述代碼是通過上下文環(huán)境和數(shù)據(jù)列表來構(gòu)造適配器,并且重寫其getItem()方法。在此需要明白的是list成員變量是適配器中的私有變量,getItem()方法是當(dāng)數(shù)據(jù)顯示在ListView時(shí)會(huì)回調(diào)的方法,或者說當(dāng)顯示數(shù)據(jù)或數(shù)據(jù)發(fā)生改變重寫加載數(shù)據(jù)時(shí)會(huì)回調(diào)這個(gè)方法(當(dāng)然還會(huì)調(diào)用getView()方法,此時(shí)不再贅述)。 代碼段3~6模擬數(shù)據(jù)改變: 代碼段3

dataList.remove(1);
adapter.notifyDataSetChanged();

代碼段4:

Map vivian = new HashMap();
vivian.put("sex", "girl");
vivian.put("nick", "vivian");
vivian.put("content", "陽光魅力大方無極限");
dataList.add(vivian);
adapter.notifyDataSetChanged();

代碼段5:

dataList = getData();
adapter.notifyDataSetChanged();

private List getData(){
    List data = new ArrayList();
    Map vivian = new HashMap();
    vivian.put("sex", "girl");
    vivian.put("nick", "vivian");
    vivian.put("content", "陽光魅力大方無極限");
    data.add(vivian);

    Map Mryang = new HashMap();
    Mryang.put("sex", "boy");
    Mryang.put("nick", "楊陽洋");
    Mryang.put("content", "成熟穩(wěn)重高富帥");
    data.add(Mryang);

    return data;
}

代碼段6:

dataList = getData();
adapter.notifyDataSetChanged();

private List getData(){
    List data = new ArrayList();
    Map vivian = new HashMap();
    vivian.put("sex", "girl");
    vivian.put("nick", "vivian");
    vivian.put("content", "陽光魅力大方無極限");
    data.add(vivian);

    Map Mryang = new HashMap();
    Mryang.put("sex", "boy");
    Mryang.put("nick", "楊陽洋");
    Mryang.put("content", "成熟穩(wěn)重高富帥");
    data.add(Mryang);

    return data;
}

getData()方法同代碼段5(略)

以上幾種情況模擬了常用的更新數(shù)據(jù)的方法,在這幾種情況種代碼段5不能實(shí)現(xiàn)數(shù)據(jù)的更新操作,代碼段3、4、6可以實(shí)現(xiàn)數(shù)據(jù)更新操作。為什么代碼段3、4、6可以更新,原因大家都明白,是因?yàn)閿?shù)據(jù)發(fā)生了變化,因此當(dāng)調(diào)用adapter.notifyDataSetChanged()方法時(shí)就會(huì)把更新后的數(shù)據(jù)顯示出來。
代碼段5的數(shù)據(jù)也發(fā)生了變化,為什么不能實(shí)現(xiàn)數(shù)據(jù)更新呢?
當(dāng)構(gòu)造Adapter適配器,數(shù)據(jù)列表dataList傳遞過去時(shí),是把dataList指向的地址副本作為參數(shù)傳遞給了adapter中的list成員變量了,因此dataList指向的內(nèi)存區(qū)域和adapter中l(wèi)ist指向的內(nèi)存區(qū)域是同一塊內(nèi)存區(qū)域,代碼段3和代碼段4對數(shù)據(jù)的添加、刪除操作是在當(dāng)前區(qū)域內(nèi)進(jìn)行的,dataList中數(shù)據(jù)的變化直接影響了adapter中l(wèi)ist的數(shù)據(jù)的變化,因此adapter中的list能夠敏感的發(fā)現(xiàn)數(shù)據(jù)發(fā)生變化。

代碼段3、4簡易模型 代碼段5中,對dataList的內(nèi)存指向做了修改,但是該指向并沒有通知到adapter中的list,也就是說list指向沒有發(fā)生變化,還是指向原來修改前的內(nèi)存區(qū)域,因此dataList的改變并不能引起list的改變,本質(zhì)上來說list沒有發(fā)現(xiàn)數(shù)據(jù)有變化,所以當(dāng)調(diào)用adapter.notifyDataSetChanged()方法時(shí),數(shù)據(jù)沒有更新。而在代碼段6中,首先移除dataList中的數(shù)據(jù),那么adapter中的list自然能夠及時(shí)發(fā)現(xiàn)數(shù)據(jù)發(fā)生了變化,從而重新從dataList中得到改變后的數(shù)據(jù)信息,因此當(dāng)調(diào)用adapter.notifyDataSetChanged()方法時(shí)能夠發(fā)生數(shù)據(jù)的更新。

代碼段5簡易模型

代碼段6簡易模型 因此當(dāng)我們想要更換ListView中的所有數(shù)據(jù)時(shí),應(yīng)該采用代碼段6的方式,先將數(shù)據(jù)移除,再重新添加數(shù)據(jù)或更換新的內(nèi)存區(qū)域指向。

到此這篇關(guān)于淺談Android中適配器的notifyDataSetChanged()為何有時(shí)不刷新的文章就介紹到這了,更多相關(guān)Android 適配器 notifyDataSetChanged()不刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 安卓(Android)實(shí)現(xiàn)選擇時(shí)間功能

    安卓(Android)實(shí)現(xiàn)選擇時(shí)間功能

    安卓開發(fā)過程中難免會(huì)碰到需要選擇日期時(shí)間的情況,當(dāng)然不可能讓用戶自己輸入日期時(shí)間,小編收集整理了一些資料,總結(jié)了一下如何實(shí)現(xiàn)android選擇時(shí)間的功能,方便后來者參考
    2016-08-08
  • 詳解Android安全防護(hù)之加密算法

    詳解Android安全防護(hù)之加密算法

    Android應(yīng)用對安全防范這方面要求越來越高了。特別是金融行業(yè),如果app沒有沒有做好安全處理,那些很容易被一些Hacker(黑客)所攻擊。并不是說做了這些安全防范,這個(gè)應(yīng)用就百分之百的安全的。只是說能夠盡可能加大破解難度。本文將詳細(xì)介紹Android安全防護(hù)之加密算法。
    2021-06-06
  • android BottomSheetDialog新控件解析實(shí)現(xiàn)知乎評論列表效果(實(shí)例代碼)

    android BottomSheetDialog新控件解析實(shí)現(xiàn)知乎評論列表效果(實(shí)例代碼)

    BottomSheetDialog是一個(gè)自定義的從底部滑入的對話框,這篇文章主要介紹了android BottomSheetDialog新控件解析實(shí)現(xiàn)知乎評論列表效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android實(shí)現(xiàn)后臺服務(wù)拍照功能

    Android實(shí)現(xiàn)后臺服務(wù)拍照功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)后臺服務(wù)拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android開發(fā)之WebView輸入框提示解決辦法

    Android開發(fā)之WebView輸入框提示解決辦法

    在做webview應(yīng)用時(shí),當(dāng)輸入的文字過多時(shí),輸入的提示箭頭會(huì)移動(dòng)到輸入框外,怎么解決這個(gè)問題呢?下面小編給大家介紹Android開發(fā)之WebView輸入框提示解決辦法,一起看看吧
    2016-06-06
  • Android Activity Results API代替onActivityResult處理頁面數(shù)據(jù)

    Android Activity Results API代替onActivityResul

    說到onActivityResult,我們已經(jīng)非常熟悉來,通過在A activity啟動(dòng)B activity并且傳入數(shù)據(jù)到B中,然后在A中通過onActivityResult來接收B中返回的數(shù)據(jù)。在最新的activity-ktx的beta版本中,谷歌已經(jīng)廢棄了onActivityResult
    2022-09-09
  • Android編程之陰影(Shadow)制作方法

    Android編程之陰影(Shadow)制作方法

    這篇文章主要介紹了Android編程之陰影(Shadow)制作方法,結(jié)合實(shí)例形式分析了Android陰影效果實(shí)現(xiàn)函數(shù)setShadowLayer的具體使用技巧,需要的朋友可以參考下
    2016-10-10
  • ListView的View回收引起的checkbox狀態(tài)改變監(jiān)聽等問題解決方案

    ListView的View回收引起的checkbox狀態(tài)改變監(jiān)聽等問題解決方案

    之前講到了自定義Adapter傳遞給ListView時(shí),因?yàn)長istView的View回收,需要注意當(dāng)ListView列表項(xiàng)中包含有帶有狀態(tài)標(biāo)識控件的問題,感興趣的朋友可以祥看本文,或許會(huì)有意外的收獲哦
    2013-01-01
  • Android WebView userAgent 設(shè)置為桌面UA實(shí)例

    Android WebView userAgent 設(shè)置為桌面UA實(shí)例

    這篇文章主要介紹了Android WebView userAgent 設(shè)置為桌面UA實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android VideoCache視頻緩存的方法詳解

    Android VideoCache視頻緩存的方法詳解

    這篇文章主要介紹了Android VideoCache視頻緩存的方法詳解的相關(guān)資料,AndroidVideoCache是一個(gè)視頻/音頻緩存庫,利用本地代理實(shí)現(xiàn)了邊下邊播,需要的朋友可以參考下
    2017-07-07

最新評論

积石山| 台州市| 营口市| 浙江省| 安达市| 大同县| 曲麻莱县| 常山县| 高邑县| 甘谷县| 葵青区| 商南县| 休宁县| 宜君县| 敦化市| 湟源县| 河南省| 华容县| 石河子市| 甘泉县| 新余市| 巴南区| 屏东市| 文水县| 通山县| 三穗县| 奈曼旗| 上栗县| 易门县| 靖远县| 河间市| 阜阳市| 凤台县| 巩义市| 三亚市| 磴口县| 河间市| 融水| 桃园县| 保亭| 阳原县|