欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android控制界面刷新技巧汇总

程序员文章站 2022-06-30 08:30:30
今天整理一下在项目中怎么去控制我们的数据刷新。 不需要广播、事件总线,就能全局性的控制想要刷新的界面。 先来看一下效果图: 近期在写项目的过程中,感觉...

今天整理一下在项目中怎么去控制我们的数据刷新。

不需要广播、事件总线,就能全局性的控制想要刷新的界面。

先来看一下效果图:

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

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

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