2015-01-30 1 views
0

은 (그것은 조각에의) 조각의 버튼을 선언 할 수 없습니다 오류,하지만 난 그것을 수행하는 APP ...는 내가 해봤 것은, 내가 내 APP에 버튼을 선언하기 위해 노력하고있어

내 로그 캣 오류가 시작있을 때 :

01-30 08:22:18.865 16165-16165/joancolmenero.taulaperiodica.com.taulaperiodicaapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: joancolmenero.taulaperiodica.com.taulaperiodicaapp, PID: 16165 
java.lang.NullPointerException 
     at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.seguentelement(JocFragment.java:102) 
     at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.onCreateView(JocFragment.java:90) 
     at android.app.Fragment.performCreateView(Fragment.java:1700) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
     at android.app.BackStackRecord.run(BackStackRecord.java:684) 
     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5102) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 

이 줄은 텍스트 뷰 tvPregunta입니다. :

at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.seguentelement(JocFragment.java:102) 

그리고이 하나 seguentelement();입니다 :

at joancolmenero.taulaperiodica.com.taulaperiodicaapp.JocFragment.onCreateView(JocFragment.java:90) 

seguentelement()는, 그래서 내 질문은 왜 텍스트 뷰가 충돌이다 onCreateView에서 만든 private void입니까?

나는 ...

onCreateView 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.joc_fragment, container, false); 

// Titol del joc 
     TextView tvJuego = (TextView) rootView.findViewById(R.id.tvJuego); 
     // shadow del textview 
     tvJuego.setShadowLayer(1, 0, 3, Color.GRAY); 
     // creem una variable per a cada ib 

     // NewGame HIDEEEEEEEEEE 
     NewGame = (Button)rootView.findViewById(R.id.btNewGame); 
     NewGame.setVisibility(View.INVISIBLE); 
     NewGame.setText(""); 


     // IB --> ID imageButton 
     berijuego=(ImageButton)rootView.findViewById(R.id.ibBeriJuego); 
     borojuego=(ImageButton)rootView.findViewById(R.id.ibBoroJuego); 
     cobajuego=(ImageButton)rootView.findViewById(R.id.ibCobaJuego); 
     indijuego=(ImageButton)rootView.findViewById(R.id.ibIndiJuego); 
     hidrojuego=(ImageButton)rootView.findViewById(R.id.ibHidroJuego); 
     ununjuego=(ImageButton)rootView.findViewById(R.id.ibUnunJuego); 
     plutojuego=(ImageButton)rootView.findViewById(R.id.ibPlutoJuego); 
     radijuego=(ImageButton)rootView.findViewById(R.id.ibRadiJuego); 
     promjuego=(ImageButton)rootView.findViewById(R.id.ibPromJuego); 
     sodijuego=(ImageButton)rootView.findViewById(R.id.ibSodiJuego); 
     zicrojuego=(ImageButton)rootView.findViewById(R.id.ibZicroJuego); 
     molijuego=(ImageButton)rootView.findViewById(R.id.ibMoliJuego); 
     // setOnClickListener para todoos 
     berijuego.setOnClickListener(this); 
     borojuego.setOnClickListener(this); 
     cobajuego.setOnClickListener(this); 
     indijuego.setOnClickListener(this); 
     hidrojuego.setOnClickListener(this); 
     ununjuego.setOnClickListener(this); 
     plutojuego.setOnClickListener(this); 
     radijuego.setOnClickListener(this); 
     promjuego.setOnClickListener(this); 
     sodijuego.setOnClickListener(this); 
     zicrojuego.setOnClickListener(this); 
     molijuego.setOnClickListener(this); 

     //Nivellactual 12 MAX o aun quedan errores 

     if ((nivellactual <= 12) || (errores > 0)) { 
      nivellactual = nivellactual + 1; 
      seguentelement(); 
     } 

     return rootView; 
    } 

을 나는 rootview 및 보이드의 전화를 야해 onCreateView있어 그리고 그것은 여기에 충돌 :

public void seguentelement() { 

    switch (nivellactual) { 

     case 1: 

      TextView tvPregunta = (TextView) getActivity().findViewById(R.id.tvPregunta); 
      String pregunta = ("Quin element és el Hidrògen?"); 
      tvPregunta.setText(pregunta); 
      // int de elemento es la imagebutton 
      elementcorrecte = (R.id.ibHidroJuego); 

      break; 

당신이 찾을 수 있기를 바랍니다 내 오류. 당신의 seguentelement() 여기 방법

TextView tvPregunta = (TextView) getActivity().findViewById(R.id.tvPregunta); 

tvPregunta의 ID에

+0

여기에 코드가 있습니다.> –

+0

여기에 코드를 게시하십시오 –

+0

내 문제를 설명하려고했습니다 ....편집이 –

답변

2

부모 액티비티를 반환하고 TextField가 추가 된 부분이 아니기 때문에 getActivity()를 호출하면 안됩니다.
rootView의 findViewId()를 호출하여()는 전역 변수 텍스트 필드를 만들고 onCreateView에서 인스턴스화 할 수 있습니다, 대신 http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29

참조하십시오.
참고 : TextView의 레이아웃은 입니다. joc_fragment이 맞습니까?

TextView tvPregunta; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.joc_fragment, container, false); 
    ... 

    tvPregunta = (TextView) rootView.findViewById(R.id.tvPregunta); // instantiate here 
    berijuego=(ImageButton)rootView.findViewById(R.id.ibBeriJuego); 

    ... 

    return rootView; 
} 

public void seguentelement() { 
    switch (nivellactual) { 
     case 1: 
      // 
      String pregunta = ("Quin element és el Hidrògen?"); 
      tvPregunta.setText(pregunta); 
      // int de elemento es la imagebutton 
      elementcorrecte = (R.id.ibHidroJuego); 
      break; 
    } 
    ... 
} 
+0

네, 그게 내 joc_fragment 레이아웃에 있습니다 ... 그래서 내가 가지고있는 Textview만큼 골볼 변수를 만들었습니까? (또는 단추 등). –

+0

예, berijuego ImageButton과 같은 전역 변수 TextView를 만듭니다. 그래서 당신에게 아이디어를주기 위해 그 곳을 그곳에 남겨 두었습니다. –

+0

그것은 매력처럼 일했다 @ JoVer M, 고마워! –

0

당신처럼 OnCreateView()에 넣어 가지고 이렇게 생성되지

TextView tvPregunta = (TextView) rootView.findViewById(R.id.tvPregunta); 
+0

이렇게하면'setText'가 충돌합니다 .. –

+0

@Joan Colmenero가 TexView tvPregunta를 전역 변수로 선언합니다 – Akash

+0

작동하지 않습니다 ...이 Textview에 텍스트를 넣으려고 할 때 충돌이 발생하고' 치명적인 예외 : 주 프로세스 : joancolmenero.taulaperiodica.com.taulaperiodicaapp, PID : 29195 java.lang.NullPointerException' –

0

내부 조각 클래스는 onViewCreated를 얻을 것이다 () 당신이보기를 찾을 수있는 뷰 객체를 얻는 것처럼이 메소드에서 항상 뷰를 초기화해야하는 메소드를 오버라이드한다.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    view.findViewById(R.id.yourId).setOnClickListener(this); 
    //or 
    getActivity().findViewById(R.id.yourId).setOnClickListener(this); 

} 
+0

이것은 물론 완전히 잘못되었습니다, 당신은 단지 OP의 문제를 반복하고 있습니다 ... – 2Dee

0

당신은, 당신의 조각에 귀하의 의견을 주입과 같이 할 을 사용해야합니다

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.jakewharton:butterknife:6.0.0' 
: 당신의 build.gradle 파일로 사용하려면 다음 종속성을 추가

public class YourFragment extends Fragment { 
     @InjectView(R.id.btnSave) 
     public Button saveButton; 

     @OnClick(R.id.btnSave) 
     public void save(View view) { 
      ... 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.your_fragment, container, false); 
      ButterKnife.inject(this, rootView); 
      ... 
     } 
} 

관련 문제