有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当前前台活动后面的活动中的java调用方法

我正在尝试在我的应用程序中创建一个“自动刷新”函数——因此,如果一个活动或片段在后台已超过两分钟,它将在进入前台时自动从api获取新数据

然而,我有一个例子,活动a中的片段a执行api调用,并在列表中显示数据。单击特定列表元素时,进入活动B,其中会显示更多信息

问题是——当活动B在后台至少两分钟后进入前台时,我宁愿得到整个列表(它是动态的,通常很短),理想情况下使用与片段a中初始获取相同的代码,而不是对特定的listelement进行api调用

可以从片段a中的活动B调用方法吗?我该怎么做?之后如何将数据传回活动B,以更新那里的UI

所以我有一堆看起来像:

Activity B (Foreground)

Fragment A in Activity A

我想从活动B调用片段a中的一个方法,并在http请求响应后向活动B报告

提前谢谢,如果有什么需要详细说明的,请告诉我


共 (3) 个答案

  1. # 1 楼答案

    无需调用活动A的方法->;活动B中的片段A只是为了在两秒钟后刷新数据。 您可以在片段a的onPause方法或活动a中启动线程(根据需要)。然后在onResume中停止该线程

    //field
    private Handler handler;
    private Runnable runnable;
    
    private void getDataFromNetwork(){
       handler = new Handler();
       runnable = new Runnable() {
         @Override
         public void run() {
            //Do something after 2000ms
    
           //call this method to again schedule this thread after 2000ms.
           handler.postDelayed(this, 2000);
       }
     };
    
       handler.postDelayed(runnable, 2000);
    }
    

    在onResume中,只需删除此方法的回调

    handler.removeCallbacks(runnable);
    

    但是,在使用这种方法时,请始终记住从处理程序中删除回调,否则它将成为悬空线程,并导致内存泄漏

  2. # 2 楼答案

    你可以用

    @Override
    public void onResume(){
        super.onResume();
        //Get value from api and update UI...
    }
    
  3. # 3 楼答案

    您可以尝试以下解决方案:

    在活动a&;中的片段a中编写一个公共静态方法;从活动B中调用它=>;但在活动B中处理方法的输出以显示结果是很重要的 对于共享数据,可以使用SharedReference、本地存储或静态变量