搜尋

首頁  >  問答  >  主體

android - Fragment切换的详细执行流程是怎样的?

高洛峰高洛峰2770 天前830

全部回覆(3)我來回復

  • ringa_lee

    ringa_lee2017-04-17 17:01:11

    fragment 切換有兩種策略

    1.使用replace,替換當前的fragment
    2.使用add 和hide 方法,要顯示哪個就顯示哪個,其他的則隱藏即可,這樣相比於第一種在每次切換時不用每次都去載入一次數據,但是記憶體消耗上稍大

    fragment+viewpager

    會載入目前的fragment 和其相鄰的Fragment為viewpager滑動做準備

    RadioButton

    只載入目前的Fragment

    建議在選擇切換策略時選擇第二種

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:01:11

    你的1,2問題你完全可以自己打Log實現查看,這樣以後印象深刻,更有效果。
    至於刷新的不知道你是怎麼樣的函數,最後一個其實只要在onKeyDown中判斷,你把這段程式碼運用上去應該沒什麼問題了:

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                //防止按一次退出
                if (System.currentTimeMillis() - mExitTime > 2000) {
                    ToastUtils.showShort("再按一次回到桌面");
                    mExitTime = System.currentTimeMillis();
                } else {
                    finish();
                }
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:01:11

    finish只是結束目前的activity,讓你的所有activity都繼承下面這個activity就能實現你想要的效果。當然還有其他方法就得靠自己查了。

    public class BaseActivity extends Activity {
        
        private long exitTime;
        
        BroadcastReceiver exitReceiver = new BroadcastReceiver() {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (action.equals(ExitUtils.EXIT)) {
                    finish();
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            IntentFilter filter = new IntentFilter();
            filter.addAction(ExitUtils.EXIT);
            this.registerReceiver(exitReceiver, filter);
            exitTime = System.currentTimeMillis();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            this.unregisterReceiver(exitReceiver);
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK
                    && event.getAction() == KeyEvent.ACTION_DOWN) {
                if ((System.currentTimeMillis() - exitTime) > 2000) {
                    Toast.makeText(getApplicationContext(), "再按一次退出程序",
                            Toast.LENGTH_SHORT).show();
                    exitTime = System.currentTimeMillis();
                } else {
                    Intent exitIntent = new Intent();
                    exitIntent.setAction(ExitUtils.EXIT);
                    getApplicationContext().sendBroadcast(exitIntent);
                }
                return true;
            }
    
            return false;
        }
    }
    

    回覆
    0
  • 取消回覆