android - Fragment切换的详细执行流程是怎样的?
高洛峰
高洛峰 2017-04-17 16:59:11
0
3
826
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(3)
左手右手慢动作

fragment 切換有兩種策略

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

fragment+viewpager

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

RadioButton

只載入目前的Fragment

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

伊谢尔伦

你的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);
    }
大家讲道理

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;
    }
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板