Android控制界面刷新技巧匯總
今天整理一下在項目中怎么去控制我們的數(shù)據(jù)刷新。
不需要廣播、事件總線,就能全局性的控制想要刷新的界面。
先來看一下效果圖:

近期在寫項目的過程中,感覺很多界面中的狀態(tài),如果在詳情頁或者其他地方改變之后,需要進行同步的話,控制起來還是比較麻煩的。
就比如一個列表界面,我在詳情頁進行操作之后,回來之后列表狀態(tài)需要改變,如果我沒操作,回來之后是不需要改變,一般寫法要么是考慮 startActivityForResult(), 要么就是每次界面重現(xiàn)(onResume方法)的時候,去操作當前列表,startActivityForResult 這個還可以接受,每次界面重現(xiàn)都去刷新當前列表,這個做法就有點不明智了。 但是 用 startActivityForResult 有時候也不是很方便,比如我界面層次多了呢,到第五層去刷新第一層界面。這個時候就要考慮其他方式了。
這里介紹的控制界面小技巧,就是 定義一個全局的靜態(tài)類,用來存放各個界面的各種判斷條件,然后利用生命周期的 OnResume 方法去進行條件判斷。
下面先貼出來 Demo 中的這個靜態(tài)類的代碼:
public class MemoryUtil {
/**
* 是否刷新第一個界面
*/
public boolean isRefreshMain = false;
/**
* 是否刷新第二個界面
*/
public boolean isRefreshSecond = false;
/**
* 是否刷新第三個界面
*/
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;
}
}
貼出來這幾個界面的簡單代碼:
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ù)的地方,這個還是有一定的限制。其他的也是要視情況而定了。
注意要在退出應用的時候,調(diào)用 clearMomery()來釋放內(nèi)存。
各位也可以根據(jù)自己的項目需要或者自己的想法去進行調(diào)整,這里只是做一個簡單的整理介紹。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android Flutter實現(xiàn)GIF動畫效果的方法詳解
如果我們想對某個組件實現(xiàn)一組動效應該怎么辦呢?本文將利用Android Flutter實現(xiàn)GIF動畫效果,文中的示例代碼講解詳細,需要的可以參考一下2022-06-06
Intellij IDEA + Android SDK + Genymotion Emulator打造最佳Android
本文介紹Lorinnn在開發(fā)Android過程不斷跌打滾爬中安裝的一套開發(fā)環(huán)境,相信你在使用后同樣有不錯的體會。2014-07-07
Android使用Sqlite存儲數(shù)據(jù)用法示例
這篇文章主要介紹了Android使用Sqlite存儲數(shù)據(jù)的方法,結合實例形式分析了Android操作SQLite數(shù)據(jù)庫的相關步驟與操作技巧,需要的朋友可以參考下2016-11-11
Android 6.0調(diào)用相機圖冊崩潰的完美解決方案
這篇文章主要介紹了Android 6.0調(diào)用相機圖冊崩潰的完美解決方案,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
Android Studio實現(xiàn)標題欄和狀態(tài)欄的隱藏
這篇文章主要介紹了Android Studio實現(xiàn)標題欄和狀態(tài)欄的隱藏功能,在文中給大家補充介紹了android studio 去掉標題欄狀態(tài)欄的完整代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-11-11

