Android控制界面刷新技巧汇总
今天整理一下在项目中怎么去控制我们的数据刷新。
不需要广播、事件总线,就能全局性的控制想要刷新的界面。
先来看一下效果图:
近期在写项目的过程中,感觉很多界面中的状态,如果在详情页或者其他地方改变之后,需要进行同步的话,控制起来还是比较麻烦的。
就比如一个列表界面,我在详情页进行操作之后,回来之后列表状态需要改变,如果我没操作,回来之后是不需要改变,一般写法要么是考虑 startActivityForResult(), 要么就是每次界面重现(onResume方法)的时候,去操作当前列表,startActivityForResult 这个还可以接受,每次界面重现都去刷新当前列表,这个做法就有点不明智了。 但是 用 startActivityForResult 有时候也不是很方便,比如我界面层次多了呢,到第五层去刷新第一层界面。这个时候就要考虑其他方式了。
这里介绍的控制界面小技巧,就是 定义一个全局的静态类,用来存放各个界面的各种判断条件,然后利用生命周期的 OnResume 方法去进行条件判断。
下面先贴出来 Demo 中的这个静态类的代码:
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; } /** * 清理保存的内存 */ 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; } }
这种写法用于控制全局判断条件还是挺方便的,不过有些利用到缓存数据,或者传递参数的地方,这个还是有一定的限制。其他的也是要视情况而定了。
注意要在退出应用的时候,调用 clearMomery()来释放内存。
各位也可以根据自己的项目需要或者自己的想法去进行调整,这里只是做一个简单的整理介绍。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)