>  Q&A  >  본문

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

高洛峰高洛峰2721일 전785

모든 응답(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
  • 취소회신하다