찾다

 >  Q&A  >  본문

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

高洛峰高洛峰2820일 전870

모든 응답(3)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-17 17:01:11

    조각 전환에는 두 가지 전략이 있습니다

    1. 현재 조각을 바꾸려면 교체를 사용하세요.
    2. 표시하려는 조각을 표시하고 다른 조각을 숨기려면 add 및 hide 메소드를 사용하세요. 이 방법은 첫 번째 방법과 비교할 때 필요하지 않습니다. 전환할 때마다 데이터를 로드하지만 메모리 소모가 약간 더 큽니다.

    조각+뷰페이지

    뷰페이지 슬라이딩을 준비하기 위해 현재 조각과 인접한 조각이 로드됩니다.

    라디오버튼

    현재 조각만 로드

    전환 전략을 선택할 때 두 번째 옵션을 선택하는 것이 좋습니다

    회신하다
    0
  • 伊谢尔伦

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

    질문 1과 2를 기록하여 직접 확인하실 수 있으며, 이는 향후 귀하에게 더 큰 감동을 주고 더 효과적인 결과를 가져올 것입니다.
    새로고침 기능은 어떤 기능인지 모르겠습니다. 마지막 기능은 onKeyDown에서만 판단하면 됩니다. 이 코드를 적용하면 문제가 없을 것입니다.

    <코드>@Override
        공개 부울 onKeyDown(int keyCode, KeyEvent 이벤트) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                //한 번 눌러 종료하는 것을 방지합니다.
                if (System.currentTimeMillis() - mExitTime > 2000) {
                    ToastUtils.showShort("바탕 화면으로 돌아가려면 다시 클릭하세요.");
                    mExitTime = System.currentTimeMillis();
                } 또 다른 {
                    마치다();
                }
                사실을 반환;
            }
            return super.onKeyDown(keyCode, 이벤트);
        }

    회신하다
    0
  • 大家讲道理

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

    Finish는 현재 활동을 종료합니다. 원하는 효과를 얻으려면 모든 활동이 다음 활동을 상속받도록 하세요. 물론 직접 확인해야 할 다른 방법도 있습니다.

    공개 클래스 BaseActivity는 활동을 확장합니다.
        
        비공개 긴 종료 시간;
        
        BroadcastReceiver ExitReceiver = 새로운 BroadcastReceiver() {
    
            @보수
            public void onReceive(컨텍스트 컨텍스트, 의도 의도) {
                문자열 작업 =intent.getAction();
                if (action.equals(ExitUtils.EXIT)) {
                    마치다();
                }
            }
        };
    
        @보수
        protected void onCreate(Bundle saveInstanceState) {
            super.onCreate(savedInstanceState);
            IntentFilter 필터 = 새로운 IntentFilter();
            filter.addAction(ExitUtils.EXIT);
            this.registerReceiver(exitReceiver, 필터);
            exitTime = System.currentTimeMillis();
        }
    
        @보수
        보호 무효 onDestroy() {
            super.onDestroy();
            this.unregisterReceiver(exitReceiver);
        }
    
        @보수
        공개 부울 onKeyDown(int keyCode, KeyEvent 이벤트) {
            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();
                } 또 다른 {
                    인텐트exitIntent = new Intent();
                    exitIntent.setAction(ExitUtils.EXIT);
                    getApplicationContext().sendBroadcast(exitIntent);
                }
                사실을 반환;
            }
    
            거짓을 반환;
        }
    }
    

    회신하다
    0
  • 취소회신하다