2013-08-19 5 views
0

아래는 내 전체 활동입니다. 기본적으로 두 개의 인 텐트를 전달하고 하나는 텍스트 뷰로 보내고 다른 하나는 제목으로 설정합니다. 그러면 토글 전체 화면 기능이 100 % 작동합니다.활동 겉보기에는 아무 이유없이 충돌이 발생 했습니까? -Android

나는 문제를 파악하지 못하는 것 같습니다. 하지만 최근에 몇 가지 큰 변화를 만들었고, 시도한 후에는 활동을 시작할 수 없으며 앱이 다운됩니다.

나는 많은 활동이 있으며, Eclipse가 메뉴 폴더의 모든 활동에 대해 settings_menu 레이아웃을 작성한다는 사실을 알게되었다. 나는이 하나의 활동을 제외하고는 그들을 사용할 필요가 없다. 총 15 개의 활동이 있다고 가정 해 보겠습니다.이 활동 (Xtxt)을 제외한 다른 모든 활동의 XML 설정 메뉴 파일 14 개를 삭제했습니다.

하지만이 모든 것을 삭제 한 후에도 앱이 계속 작동합니다. 이제 설정 항목을 약간 변경했는데 메뉴 버튼을 클릭 할 때 나타나는 텍스트 만 나타납니다.

문제를 해결할 수없는 것 같습니다. 그래서, 아래는 내 전체 활동이고, 그 아래 LogCat 출력은 오류입니다.

public class Xtxt extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView textView = (TextView) findViewById(R.id.xxtt); 
     setContentView(R.layout.xtxt); 
     toggleFullscreen(true); 
     Intent intent = getIntent(); 
     String svar1 = intent.getExtras().getString("a"); 
     String svar2 = intent.getExtras().getString("b"); 
     this.setTitle(svar2); 
     textView.setText(svar1); 

    } 

    private void toggleFullscreen(boolean fullscreen) { 
     WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
     if (fullscreen) { 
      attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     } else { 
      attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     } 
     getWindow().setAttributes(attrs); 
    } 

} 

다음은 로그 캣입니다 : 내가 삭제를 취소했는데, 심지어 삭제 메뉴 파일을 복원 한 후에 난 아직도 이상한 널 포인터 오류를 갖고있는 것 같다

08-19 13:22:20.398: E/ActivityThread(31873): Failed to find provider info for com.google.plus.platform 
08-19 13:22:20.406: E/AndroidRuntime(31873): FATAL EXCEPTION: main 
08-19 13:22:20.406: E/AndroidRuntime(31873): java.lang.RuntimeException: Unable to start activity ComponentInfo{x.abcd/x.abcd.Xtxt}: java.lang.NullPointerException 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.access$600(ActivityThread.java:134) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.os.Looper.loop(Looper.java:154) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.main(ActivityThread.java:4624) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at java.lang.reflect.Method.invoke(Method.java:511) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at dalvik.system.NativeStart.main(Native Method) 
08-19 13:22:20.406: E/AndroidRuntime(31873): Caused by: java.lang.NullPointerException 
08-19 13:22:20.406: E/AndroidRuntime(31873): at x.abcd.Xtxt.onCreate(Xtxt.java:27) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.Activity.performCreate(Activity.java:4479) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 
08-19 13:22:20.406: E/AndroidRuntime(31873): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041) 
08-19 13:22:20.406: E/AndroidRuntime(31873): ... 11 more 

. 내가 놓친 게 있니?

무엇이 잘못 되었나요?

Pls 도움.

답변

5

setContentView은보기 초기화 전에 먼저 와야합니다.

는 활동에 설정된 현재 뷰 계층의 할 수 있습니다 findViewById onCreate

TextView textView = (TextView) findViewById(R.id.xxtt); 
    setContentView(R.layout.xtxt); 

setContentView(R.layout.xtxt); 
    TextView textView = (TextView) findViewById(R.id.xxtt); 

으로 교체합니다. 레이아웃을 활동으로 설정하지 않았기 때문에 findViewById이 실패합니다. 이 때문에 NUllPointerException이 표시 될 수 있습니다.

편집 :

이 활동의 ​​라이프 사이클 동안 한 번만 호출되기 때문에 onCreate에 귀하의 의견을 초기화하는 것이 좋습니다

. 당신이 당신의 활동을 초기화하는 경우 워드 프로세서

http://developer.android.com/reference/android/app/Activity.html

onCreate(Bundle)에서 인용

이다. 무엇보다 중요한 것은 여기에서 일반적으로 setContentView(int)에 UI를 정의하는 레이아웃 리소스를 호출하고 findViewById(int)을 사용하여 프로그래밍 방식으로 상호 작용해야하는 해당 UI의 위젯을 검색하는 것입니다.

+1

그에게 내가 된 setContentView를 호출 할 때 발생에 대한 간략한 설명을 줄 수 있을까? – Blackbelt

+0

아, 맞아. 그랬어. 바보 야. – user2678122

+0

어쨌든, 한 가지 더, OnCreate 또는 외부 (활동 블록에서)의 구성 요소를 초기화하는 것이 더 좋습니다. – user2678122

0
TextView textView = (TextView) findViewById(R.id.xxtt); 
    setContentView(R.layout.xtxt); 

->

setContentView(R.layout.xtxt); 
    TextView textView = (TextView) findViewById(R.id.xxtt); 
관련 문제