2017-05-15 1 views
-4

저는 UI의 기본 구조와 통신 및 레이아웃의 작동 방식을 배울 수있는 장소를 찾고 있습니다. 그러나. 내 문제는 조각 내 TextView 값을 변경하려고 시도하는 것으로부터 온다. 값을 변경하려고하면 nullPointerException이 계속 발생합니다. 조각을 참조하기 위해 조각 관리자를 사용하고 있습니다. 여기 프래그먼트와의 통신 NullPointerException

는 조각 코드입니다 :

package com.archronix.infotainment; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class Fragment1 extends android.support.v4.app.Fragment { 
public TextView status; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_fragment1, container, 
    false); 
    return v; 
} 

public static Fragment1 newInstance() { 
    Fragment1 f = new Fragment1(); 
    return f; 
} 

public void postText(String str){ 
    status.setText(status.getText()+"\n"+str); 
} 
} 

그리고 이것은 내가 내 조각 관리자 선언하는 방법입니다

fragment1.postText("testtext"); 

내 로그 캣 : 나는 그것을 사용하는 방법,

fragment1 = (Fragment1) 
getSupportFragmentManager().findFragmentById(R.id.fragment1); 

을 그리고 :

05-15 10 : 56 : 42.406 4109-4109/com.archronix.infotainment E/AndroidRuntime : 치명적인 예외 : 주 프로세스 : com.archronix.infotainment, PID : 4109 java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.archronix. infotainment/com.archronix.infotainment.MainActivity} : java.lang.NullPointerException : null 객체 참조에 대한 가상 메소드 'void com.archronix.infotainment.Fragment1.postText (java.lang.String)'을 호출하려고 시도했습니다. android에서 . android.app에서 android.app.ActivityThread.access $ 800 (ActivityThread.java:144) 에서 android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2360) 에서 app.ActivityThread.performLaunchActivity (ActivityThread.java:2298) .ActivityThread $ H.handleMes sage (ActivityThread.java:1278) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:135) at android.app.ActivityThread.main ActivityThread.java:5221) at java.lang.reflect.Method.invoke (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694) 에 의해 발생 : java.lang.NullPointerException : 가상 메소드 'void com. archronix.infotainment.Fragment1.postText (java.lang.String) '에 대한 android.app.Instrumentation.callActivityOnCreate에서 android.app.Activity.performCreate (Activity.java:5933) (Instrumentation.java에서 com.archronix.infotainment.MainActivity.onCreate (MainActivity.java:102) ULL에서 객체 참조 : 1105) android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2360에서 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2251에서 ) ) android.app.ActivityThread.access $ 800 (ActivityThread.java에서 : 144) android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1278) android.os.Handler.dispatchMessage (Handler.java:102) 01 android.os.Looper.loop (Looper.java:135)의 android.app.ActivityThread.main (ActivityThread.java:5221) 의 java.lang.reflect.Method.invoke (기본 메소드) at java .lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:899) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)에서 내 newbieness에 대한

죄송합니다. 비슷한 주제에 관한 20 개의 스택 오버 플로우 게시물을 읽었지만 모두 오래된 것 또는 일관성이없는 것 같습니다. 내 작업을 수행하는 가장 좋은 방법은 무엇입니까? 고맙습니다. onCreateView에서

+0

게시물을 읽었습니다. 그리고 NullPointerExceptions가 어떻게 작동하는지 이해합니다. 제 문제는 코드에서 어디에서 그리고 어떤 변수로 문제가 발생하는지 식별하는 것입니다. –

+0

해당 디버거를 사용할 수 있습니다. – Daniele

+0

보시다시피, 디버거에서 메서드를 호출 중임을 알립니다. 그 이유가 NullPointerException을 호출하는지 모르겠습니다. 내 문제를 추적 할 수있을만큼 충분히 안드로이드 메소드를 이해했으면 좋겠지 만 슬프게도 나는 그렇지 않습니다. 사용할 수있는 솔루션이 있으면 죄송합니다. 그 밖의 무엇을 검색해야할지 모르겠습니다. –

답변

0

그렇게처럼 텍스트 뷰를 초기화해야합니다

status = (TextView) v.findViewById(R.id.tv_status); 

당신은 당신이 번들을 사용할 수 있습니다하여 FragmentTransaction 전에 설정 할 텍스트를 알고 있다면 (How to transfer some data to another Fragment?)

+0

대단히 감사합니다! onCreate뿐만 아니라 응용 프로그램을 실행하는 동안 런타임에 번들을 여러 번 사용할 수 있습니까? –

+0

번들은 화면 방향이 바뀌고 일부 값을 저장하려고 할 때도 사용됩니다 (활동이 파괴되어 다시 생성되기 때문에). –

+0

일반적으로 Bundle은 Activity A에서 Activity B로 또는 Fragments간에 데이터를 전송하는 데 사용됩니다. –

1

상태 변수가 아니다 어떤 textview든지에 할당 해. return 문 앞에 onCreateView에 다음 코드를 추가하십시오.

status=v.findViewById(R.id.<nameoftextview>);