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()来释放内存。

各位也可以根据自己的项目需要或者自己的想法去进行调整,这里只是做一个简单的整理介绍。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-07-31 02:52:17

Android控制界面刷新技巧汇总的相关文章

Android ListView常用小技巧汇总_Android

ListView在我们Android项目中的地位是有目共睹的,相信几乎每一个App中都有它的身影. ListView主要是用列表形式来加载数据,在特定情况下需要实现一些特殊功能:如刷新数据,加载数据,实现动画效果等. 作为我们常用的控件,有哪些需要注意的呢? **为ListView的每一Item设置分隔线 第一种方法:也是最简单地方法,在布局文件中设置ListView的 divider属性 如:android:divider="@color/black" 第二种方法:设置android

Android ListView常用小技巧汇总

ListView在我们Android项目中的地位是有目共睹的,相信几乎每一个App中都有它的身影. ListView主要是用列表形式来加载数据,在特定情况下需要实现一些特殊功能:如刷新数据,加载数据,实现动画效果等. 作为我们常用的控件,有哪些需要注意的呢? **为ListView的每一Item设置分隔线 第一种方法:也是最简单地方法,在布局文件中设置ListView的 divider属性 如:android:divider="@color/black" 第二种方法:设置android

Android 实现界面刷新的几种方法

Android 界面刷新 Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面. 利用Handler刷新界面 实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界

android中界面的重载 刷新!!

问题描述 android中界面的重载 刷新!! 我想在第一个activity中填写信息后,想要 在第二个acitivity中用固定的格式刷新出来.拜求各位该怎么做,,,可以细说一下思路,有demo最好!! 填写: 发布: 解决方案 第一个activity填写数据后,存入数据库,跳转到第二个activity后用listview将数据库中数据取出来显示就行了. 解决方案二: 定义一个字符串s,把全部编辑框的内容用空格分开,按顺序添加到字符串, 再把字符串通过Intent 传给另一个activity,

Android界面刷新的方法分享_Android

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面. 利用Handler刷新界面实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新:而在线程中通过sen

Android界面刷新的方法分享

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面. 利用Handler刷新界面实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新:而在线程中通过sen

汇总Win7旗舰版系统中启动服务界面的技巧

windows系统服务管理是包含了计算机操作系统和应用程序提供的所有服务,而众多的系统服务并非都是用户所需要的,因此很多用户习惯通过禁用那些没有别要的服务实现开机加速与优化系统性能.因此小编为大家整合了关于系统中打开服务界面的方法汇总,赶快来看看吧 方法一: 1.按"WIN+R"快捷键,打开"运行"窗口,输入"services.msc"指令,按"确定"后就直接打开服务界面了. 方法二: 1.在桌面上,右键单击"计算机

《Android和PHP开发最佳实践》一2.8 Android图形界面

2.8 Android图形界面 前面介绍了Android应用界面(Android UI)的相关内容,不过对于一些游戏应用来说,这些UI控件往往派不上用场.此外,一些特殊的Android应用也有可能会使用到比较底层的图形类库,因此,本节我们就来学习Android的图形系统. Android系统中的图形大致可以分为2D图形和3D图形两类,2D图形的类库在android.graphics包下,本节将会重点介绍:3D图形的类库在android.opengl包下,由于这部分内容和游戏开发关系比较紧密,这部

WindowsXP小技巧汇总

WindowsXP小技巧汇总(新手专用) 1.如何自行配置WindowsXP的服务? 如果你是在单机使用WindowsXP,那么很多服务组件是根本不需要的,额外的服务程序影响了系统的速度,完全可将这些多余的服务组件禁用.单击"开始→控制面板→管理工具→服务",弹出服务列表窗口,有些服务已经启动,有些则没有.我们可查看相应的服务项目描述,对不需要的服务予以关闭.如 "Alerter",如果你未连上局域网且不需要管理警报,则可将其关闭. 2.如何消除WindowsXP的