문제

Android 앱에서 활동 간에 전환하기 위해 인텐트를 사용하고 있습니다.다음 활동에서 사용할 목적으로 데이터를 Intent에 넣습니다.휴대폰을 가로 모드와 세로 모드 간에 전환하면 인텐트에서 전달된 값이 손실되고 NullPointerException이 발생합니다.

누군가 무엇이 잘못되었는지 말해 줄 수 있습니까?

전체를 게시하려면 코드가 많습니다.하지만 누군가 코드의 특정 부분을 봐야 한다면 여기에 게시할 수 있습니다.

편집하다
상태가 저장되지 않는 문제를 해결했습니다.그러나 내가 직면한 또 다른 문제는 방향이 변경된 후에 화면의 버튼이 작동하지 않는다는 것입니다.버튼을 누르면 LogCat에 이 경고가 표시됩니다.

02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0

도와주세요.

도움이 되었습니까?

해결책

방향을 전환 할 때 활동이 재현되고 OnCreate가 리콜되므로 번들을 사용하여 현재 상태를 저장하고 방향 변경 후 복원해야합니다. TextView가있는 앱이 있고 텍스트 및 변경 방향을 입력하면이 작업을 수행 할 수 있습니다. 당신이 당신의 상태를 OnCreate를 위해 묶으면 당신은 이것을 억제 할 수 있습니다. 이것은 아마도 방향이 변경된 후 NullPointer가있는 이유 일 것입니다. 그것은 우리가 함께 살아야 할 모든 지옥처럼 성가신 일입니다.

이것 일련의 오리엔테이션 튜토리얼에 링크 이 첫 번째 특히 진행 상황과 현재 상태를 성공적으로 유지하는 방법을 정확하게 이해하는 데 도움이됩니다.

업데이트 : SO에 대한 게시물도 있습니다 회전 안드로이드에서 활동이 다시 시작됩니다 그것은 거의 같은 것을 다룹니다.

후속 질문 편집 :

오리엔테이션 변경 후 클릭 핸들러를 다시 붙잡 았습니까?

다른 팁

당신이 원하는 활동에 당신의 매니페스트 파일에 이것을 쓰십시오.

 android:configChanges="orientation|keyboardHidden"

편집 : 새로운 API 버전에 이것을 사용하십시오.

android:configChanges="orientation|keyboardHidden|screenSize"

확실히 작동합니다 ..

이 시도:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(SOME_KEY, "blah blah blah");
}

@Override
public void onCreate(Bundle savedInstanceState) {
   ...
   somevalue = savedInstanceState.getString(SOME_KEY);
   ...
}

"방향"값을 가진 Android : configchanges 속성을 선언 할 수 있으므로 활동이 다시 시작되는 것을 방지합니다. 대신, 활동은 계속 실행되며 onconfigurationChanged () 메소드가 호출됩니다.

선언하다 < android:configChanges="orientation|keyboardHidden"/> 귀하의 매니페스트에.이를 통해 방향/키보드 가시성 변경을 직접 관리할 수 있습니다.물론 관리를 위해 콜백 메서드를 재정의할 필요는 없습니다.

안녕하세요 저는이 문제를 겪었습니다. 나를 위해 고쳐진 것은 다음과 같습니다.

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putString("Username", mUsername);
    savedInstanceState.putString("Password", mPassword);
    savedInstanceState.putString("UserID", mUserID);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

그런 다음 oncreate ()에서 :

if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        mUsername = "?";
        mPassword = "?";
        mUserID = "?";
    } else {
        mUsername = extras.getString("Username");
        mPassword = extras.getString("Password");
        mUserID = extras.getString("UserID");
    }
} else {
    mUsername = (String) savedInstanceState.getSerializable("Username");
    mPassword = (String) savedInstanceState.getSerializable("Password");
    mUserID = (String) savedInstanceState.getSerializable("UserID");
}

그러면 객체가 무효가 아닌지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top