我正在尝试在我的应用程序中创建一个“自动刷新”功能 - 所以如果一个活动或片段在后台运行超过两分钟,它将在进入前台时自动从api获取新数据。
但是我有一个案例,其中活动A中的片段A,api调用并在列表中显示数据。单击特定列表元素时,输入活动B,其中显示更多信息。
问题是 - 当活动B在后台进入至少两分钟后进入前景时,而不是对特定的听众进行api调用 - 我宁愿只获取整个列表(它是动态的,通常很短并且理想地使用我用于片段A中的初始提取的相同代码。
是否可以从片段A中的活动B调用方法?我该怎么做?然后我如何将数据传回活动B,以更新那里的UI?
所以我的堆栈看起来像:
活动B(前景)
活动A中的片段A
我想调用活动B中片段A中的方法 - 并在http请求响应时向活动B报告。
提前致谢,如果有任何我需要详细说明,请告诉我。
答案 0 :(得分:0)
您可以使用
template <std::size_t... Is>
void callGImpl(std::index_sequence<Is...>)
{
g(f(Is)...);
}
template<int N>
void callG()
{
callGImpl(std::make_index_sequence<N>{});
}
答案 1 :(得分:0)
您可以尝试以下解决方案:
在活动A&amp;中的片段A中编写一个公共静态方法。从活动B =&gt;中调用它但是当你在活动B中时,处理显示结果的方法的输出很重要 对于共享数据,您可以使用SharedPreferences,本地存储或静态变量。
答案 2 :(得分:0)
无需在活动B中调用活动A-&gt;片段A的方法,只需在两秒钟后刷新数据。 您可以在片段A或活动A的onPause方法中启动一个线程(根据您的需要)。稍后在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);
但是使用这种方法时总是记得从处理程序中删除回调,否则它将成为悬空线程并导致内存泄漏。