Android控制界面刷新技巧匯總
今天整理一下在項(xiàng)目中怎么去控制我們的數(shù)據(jù)刷新。
不需要廣播、事件總線,就能全局性的控制想要刷新的界面。
先來看一下效果圖:
近期在寫項(xiàng)目的過程中,感覺很多界面中的狀態(tài),如果在詳情頁(yè)或者其他地方改變之后,需要進(jìn)行同步的話,控制起來還是比較麻煩的。
就比如一個(gè)列表界面,我在詳情頁(yè)進(jìn)行操作之后,回來之后列表狀態(tài)需要改變,如果我沒操作,回來之后是不需要改變,一般寫法要么是考慮 startActivityForResult(), 要么就是每次界面重現(xiàn)(onResume方法)的時(shí)候,去操作當(dāng)前列表,startActivityForResult 這個(gè)還可以接受,每次界面重現(xiàn)都去刷新當(dāng)前列表,這個(gè)做法就有點(diǎn)不明智了。 但是 用 startActivityForResult 有時(shí)候也不是很方便,比如我界面層次多了呢,到第五層去刷新第一層界面。這個(gè)時(shí)候就要考慮其他方式了。
這里介紹的控制界面小技巧,就是 定義一個(gè)全局的靜態(tài)類,用來存放各個(gè)界面的各種判斷條件,然后利用生命周期的 OnResume 方法去進(jìn)行條件判斷。
下面先貼出來 Demo 中的這個(gè)靜態(tài)類的代碼:
public class MemoryUtil { /** * 是否刷新第一個(gè)界面 */ public boolean isRefreshMain = false; /** * 是否刷新第二個(gè)界面 */ public boolean isRefreshSecond = false; /** * 是否刷新第三個(gè)界面 */ public boolean isRefreshThree = false; private static MemoryUtil mMS; public static MemoryUtil MS = MemoryUtil.getIntance(); private static MemoryUtil getIntance() { if (mMS == null) mMS = new MemoryUtil(); return mMS; } /** * 清理保存的內(nèi)存 */ public static void clearMomery() { mMS = null; } }
貼出來這幾個(gè)界面的簡(jiǎn)單代碼:
MainActivity :
private TextView tv_1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); tv_1 = (TextView) findViewById(R.id.tv_1); } public void onClick(View view) { Intent intent = new Intent(this, SecondActivity.class); startActivity(intent); } @Override protected void onResume() { super.onResume(); if (MemoryUtil.MS.isRefreshMain) { MemoryUtil.MS.isRefreshMain = false; Toast.makeText(this, "Main is Refresh", Toast.LENGTH_SHORT).show(); } }
SecondActivity:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); findViewById(R.id.tv_2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SecondActivity.this, ThreeActivity.class); startActivity(intent); } }); } public void onClick(View view) { MemoryUtil.MS.isRefreshMain = true; } @Override protected void onResume() { super.onResume(); if (MemoryUtil.MS.isRefreshSecond) { MemoryUtil.MS.isRefreshSecond = false; Toast.makeText(this, "Second is Refresh", Toast.LENGTH_SHORT).show(); } }
ThreeActivity:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_three); findViewById(R.id.tv_1).setOnClickListener(this); findViewById(R.id.tv_2).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_1: MemoryUtil.MS.isRefreshMain = true; break; case R.id.tv_2: MemoryUtil.MS.isRefreshSecond = true; break; } }
這種寫法用于控制全局判斷條件還是挺方便的,不過有些利用到緩存數(shù)據(jù),或者傳遞參數(shù)的地方,這個(gè)還是有一定的限制。其他的也是要視情況而定了。
注意要在退出應(yīng)用的時(shí)候,調(diào)用 clearMomery()來釋放內(nèi)存。
各位也可以根據(jù)自己的項(xiàng)目需要或者自己的想法去進(jìn)行調(diào)整,這里只是做一個(gè)簡(jiǎn)單的整理介紹。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
RecyclerView+PagerSnapHelper實(shí)現(xiàn)抖音首頁(yè)翻頁(yè)的Viewpager效果
這篇文章主要為大家詳細(xì)介紹了RecyclerView+PagerSnapHelper實(shí)現(xiàn)抖音首頁(yè)翻頁(yè)的Viewpager效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10Android中AndroidStudio&Kotlin安裝到運(yùn)行過程及常見問題匯總
這篇文章主要介紹了Android(AndroidStudio&Kotlin)安裝到運(yùn)行過程及常見問題匯總,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒借鑒價(jià)值,需要的朋友可以參考下2020-03-03Flutter?EventBus事件總線的應(yīng)用詳解
這篇文章主要為大家介紹了Flutter?EventBus事件總線的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Android如何獲取系統(tǒng)通知的開啟狀態(tài)詳解
這篇文章主要給大家介紹了關(guān)于Android如何獲取系統(tǒng)通知開啟狀態(tài)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起看看吧啊。2017-08-08