San*_*ung 13 android listview android-lifecycle android-fragments fragment-lifecycle
我有一个Fragment设置a ListView并创建一个定期Handler更新Listview.然而,看起来它Handler仍然在Fragment被破坏后运行.
以下是代码.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//boilerplate code
final Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
assignAdapter();
handler.postDelayed(this, 15000);
}
});
return v;
}
Run Code Online (Sandbox Code Playgroud)
ListView销毁之后更新Fragment会导致应用程序崩溃.如何Handler在Fragment被摧毁时使其停止?我也想知道如果有任何暂停应用程序的影响Handler也是如此.
Mur*_*ain 23
你需要像这样实现处理程序
private Handler myHandler;
private Runnable myRunnable = new Runnable() {
@Override
public void run() {
//Do Something
}
};
@Override
public void onDestroy () {
mHandler.removeCallbacks(myRunnable);
super.onDestroy ();
}
Run Code Online (Sandbox Code Playgroud)
您需要存储对处理程序的引用并在片段中运行,然后当片段被销毁时,您需要从传递runnable的处理程序中删除回调.
private Handler mHandler;
private Runnable mRunnable;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//boilerplate code
mRunnable = new Runnable() {
@Override
public void run() {
assignAdapter();
handler.postDelayed(this, 15000);
}
};
mHandler = new Handler(mRunnable);
mHandler.post();
return v;
}
@Override
public void onDestroy() {
mHandler.removeCallbacks(mRunnable);
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13984 次 |
| 最近记录: |