我開始處理程序片段如下圖所示:停止處理程序時,片段被破壞
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