2016-11-07 1 views
0

오늘은 안드로이드에서 wth 파편을 시작했습니다 (지금까지는 활동 만 사용했습니다). 앱을 실행 한 후 충돌이 발생했습니다 (실제로는 시작도하지 않습니다). 내가 onCreateView()에 전화를 시도까지 활동 크래시 (안드로이드 조각)

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class MainFragment extends Fragment { 


    public MainFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     init();//----> PROBLEM HERE 
     return inflater.inflate(R.layout.fragment_main, container, false); 

    } 


    public TextView login; 
    /** Called when the user clicks link for Login/Register on right corner of the app*/ 
    public void init() { 
     login=(TextView) getView().findViewById(R.id.textView11_linkRegister); 
     login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //intent means what i want to do' 
       Intent openLoginForm = new Intent(getActivity(),Login.class); 
       startActivity(openLoginForm); 
      } 
     }); 
    } 


} 

은 내가 Init() 기능 andeverything 좋은 일을 만들어 그 문제는 내가 그 함수를 호출하는 방식이어야 알고있다. 도움을 주시면 감사하겠습니다.

THanks.

답변

0

아직이 같은 코드를 재 작성, 존재하지 않는 뷰에 액세스 할 수 없습니다 :

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_main,container,false); 
    init(v);//----> PROBLEM HERE 
    return v; 

} 


public TextView login; 
/** Called when the user clicks link for Login/Register on right corner of the app*/ 
public void init(View v) { 
    login=(TextView) v.findViewById(R.id.textView11_linkRegister); 
    login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //intent means what i want to do' 
      Intent openLoginForm = new Intent(getActivity(),Login.class); 
      startActivity(openLoginForm); 
     } 
    }); 
} 
+0

일했습니다! 감사! – Capie

0

init() 메소드를 호출 할 때보기가 아직 설정되지 않았습니다. 먼저보기를 확대 한 다음 init()에 전달하거나 onCreateView에서 직접보기를 가져옵니다. 메소드의 끝 부분에서 팽창 된 뷰를 리턴합니다.

View view = inflater.inflate(R.layout.fragment_main, container, false); 
login= (TextView) view.findViewById(R.id.textView11_linkRegister); 
login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //intent means what i want to do' 
      Intent openLoginForm = new Intent(getActivity(),Login.class); 
      startActivity(openLoginForm); 
     } 
    }); 

return view; 
+0

코드 만 대답하는 것은 권장되지 않습니다. – Emmanuel

+0

@Emmanuel 대답을 업데이트했습니다 –

0

을 다른 답변이 작성한 코드를 설명하기를, 당신은 onCreateView()이 전에 getView()를 호출 할 수 없습니다 완료되었습니다. 코드 제안에서 볼 수 있듯이 findViewById()을 부 풀려야합니다 (반환 할 것임). 이 팽창 된 뷰를 반환하면 getView()을 호출하여 이후 라이프 사이클 메서드에서 사용할 수 있습니다.