我开始处理程序片段如下图所示:停止处理程序时,片段被破坏
public class FeedsFragment extends Fragment{
private Handler handler;
private Runnable runnableCode;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Create the Handler object (on the main thread by default)
handler = new Handler();
// Define the task to be run here
runnableCode = new Runnable() {
@Override
public void run() {
// Get the No of New Feeds
getFeedCounts();
// Repeat this runnable code again every 30 seconds
handler.postDelayed(runnableCode, 30,000);
}
};
handler.post(runnableCode);
}
@Override
public void onDetach() {
super.onDetach();
handler.removeCallbacksAndMessages(runnableCode);
}
@Override
public void onDestroyView() {
handler.removeCallbacksAndMessages(runnableCode);
super.onDestroyView();
}
@Override
public void onPause() {
super.onPause();
handler.removeCallbacksAndMessages(runnableCode);
}
@Override
public void onResume() {
/**
* Start the handler again if coming back from any profile page
* or hashtag search
*/
isHandlerStopped = false;
handler.post(runnableCode);
super.onResume();
}
我去除onDetach和onDestroyView功能全部回调,但它不工作。
当我在同一个活动的这个处理器 不会停止自身加载不同的片段,只处理停止当我加载在我的应用程序的一些其他 活动。
我希望这个处理程序只在我使用它的片段被加载到活动中时运行,如果某个其他片段被加载到同一个活动中,它应该被停止。
此外,这个片段是在viewpager里面,所以当我切换tab和其他片段被加载时,处理程序不会停止。请检查以下活动代码:
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
FeedsFragment feedsFragment;
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// when user do a swipe the selected tab change
switch (position){
case 0:
break;
case 1:
feedsFragment.removeHandler();
break;
case 2:
feedsFragment.removeHandler();
break;
case 3:
feedsFragment.removeHandler();
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
FragmentAdapter adapter = new FragmentAdapter(getActivity().getSupportFragmentManager());
feedsFragment = FeedsFragment.newInstance(bundle);
adapter.addFragmentWithIcon(FeedsFragment.newInstance(null))
, mContext.getResources().getString(R.string.feed_tab_name));
adapter.addFragmentWithIcon(FeedFriendRequests.newInstance(null),
mContext.getResources().getString(R.string.requests_tab_name));
adapter.addFragmentWithIcon(NewMessagesFragment.newInstance(null), mContext.getResources().getString(R.string.message_tab_name));
adapter.addFragmentWithIcon(NotificationFragment.newInstance(null)
, mContext.getResources().getString(R.string.notification_tab_name));
pager.setAdapter(adapter);
当我在那时选择任何其他选项卡时,我正在调用FeedFragment中的removeHandler方法。
public void removeHandler(){
handler.removeCallbacks(runnableCode);
}
但仍然处理程序正在调用。
如果有人对此有所了解,请帮助我。
非常感谢
你把断点和检查? – Raghunandan
我在函数onDetach,onDestroy和onStop中添加了打印语句,但是当新片段在同一活动中被替换时,这些函数都不会被调用。如果您有任何想法,请帮助我。 –
你如何替换片段?发布代码 – Raghunandan