0

I'm using a Handler for replacing Fragment on ViewGroup.
It seems working fine, but handler handles other message after fragment resumed.
how can I explain this situation?

Here is code:

private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        Log.d(LOGTAG, "handleMessage " + msg.what);
        switch (msg.what) {
        case 0:
            Log.d(LOGTAG, "case 0 : Refresh page.");
            int type = msg.arg1;
            Fragment tempPage;
            switch(type) {
                default:
                case 0:
                    tempPage = new PageA();
                    break;
                case 1:
                    tempPage = new PageB();
                    break;
                case 2:
                    tempPage = new PageC();
                    break;
            }

            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.add(R.id.page_container, tempPage);
            fragmentTransaction.commitAllowingStateLoss();

            Log.d(LOGTAG, "sendEmptyMessageDelayed. 1");
            mHandler.sendEmptyMessageDelayed(2, 0);
            Log.d(LOGTAG, "sendEmptyMessageDelayed. 2");
            break;

        case 2:
            // something...

        }
    }
}

here is logcat:

02-12 14:14:13.520: D/MainActivity(2062): handleMessage 0
02-12 14:14:13.520: D/MainActivity(2062): case 0 : Refresh page.
02-12 14:14:13.570: D/MainActivity(2062): sendEmptyMessageDelayed. 1
02-12 14:14:13.570: D/MainActivity(2062): sendEmptyMessageDelayed. 2
02-12 14:14:13.590: D/libEGL(2062): loaded /system/lib/egl/libEGL_VIVANTE.so
02-12 14:14:13.600: D/libEGL(2062): loaded /system/lib/egl/libGLESv1_CM_VIVANTE.so
02-12 14:14:13.660: D/libEGL(2062): loaded /system/lib/egl/libGLESv2_VIVANTE.so
02-12 14:14:13.730: E/BufferQueue(791): [jkpark.main/jkpark.main.MainActivity] dequeueBuffer: cant dequeue multiple buffers without setting the buffer count
02-12 14:14:13.730: D/Page.PageA(2062): onCreateView
02-12 14:14:13.860: D/dalvikvm(2062): GC_FOR_ALLOC freed 936K, 12% free 7670K/8636K, paused 12ms, total 13ms
02-12 14:14:14.050: D/Page.PageA(2062): onActivityCreated
02-12 14:14:14.050: D/Page.PageA(2062): onStart
02-12 14:14:14.050: D/Page.PageA(2062): onResume
02-12 14:14:14.050: D/MainActivity(2062): handleMessage 2

as you can see, handling case 0 is done at 14:14:13.570, but the next handling message is printed after fragment resumed.
Why? please explain me.

JK Park
  • 107
  • 8
  • you must be passing message to handler in onResume of your fragment, your handler will receive only those messages that we pass to our handler object. – Gru Feb 12 '15 at 06:02
  • But, I want to do case 2 during the fragment is creating.... – JK Park Feb 12 '15 at 06:08

0 Answers0