2012-07-14 8 views
1

저는 Activity 내에서가 아니라 Java 클래스 내에서 다음을 수행합니다.OnClickListener를 버튼에 추가하려고 할 때 NullPointerException이 발생했습니다.

LinearLayout buttonLayout = (LinearLayout) parentContext.getLayoutInflater().inflate(R.layout.app_dialog, null); 
Button btnSignIn = (Button) parentContext.findViewById(R.id.BTN_ID_SIGN_IN); 
Button btnCancel = (Button) parentContext.findViewById(R.id.BTN_ID_CANCEL); 
btnSignIn.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v) { ... }}); 

레이아웃 XML :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/footer" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:orientation="horizontal" 
    android:layout_alignParentBottom="true" style="@android:style/ButtonBar" > 

    <Button android:id="@+id/BTN_ID_SIGN_IN" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight="1" 
     android:text="@string/em_btn_signin" /> 

    <Button android:id="@+id/BTN_ID_CANCEL" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_weight="1" 
     android:text="@string/em_btn_cancel" /> 
</LinearLayout> 

이 마지막 줄은 NPE를 던지고있다. onClickListener없이 코드를 시도하면 버튼이 완벽하게 표시됩니다 (obv는 탭하면 아무 일도 발생하지 않음). 왜 내가 버튼에 아무것도 넣지 않을거야?

+0

더 많은 코드를 게시 할 수 있습니까? parentContext는 무엇입니까? –

+0

parentContext는 호출하는 Activity의 컨텍스트입니다. 나는 활동이 아닌 별도의 수업에서 이것을하고있다.) – PlanetaryFortressRush

+0

왜 팽창의 두 번째 매개 변수로 "null"이 있습니까? 두 번째 매개 변수는 루트 레이아웃이어야합니다. – 0gravity

답변

2

이 시도 :

Button btnSignIn = (Button) buttonLayout.findViewById(R.id.BTN_ID_SIGN_IN); 
Button btnCancel = (Button) buttonLayout.findViewById(R.id.BTN_ID_CANCEL); 
btnSignIn.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v) { ... }}); 
+0

그게 다야, 고마워! – PlanetaryFortressRush

0

btnSignIn.setOnClickListener(this)와 함께 누락 되었습니까?

xml의 ID도 소문자 여야합니까?

+0

아니요, 소문자 일 필요는 없습니다. xml 파일의 이름 만 소문자 여야하며 onClickListener를 설정하는 방법은 여러 가지가 있습니다. setOnClickListener (this)는 내부 OnClickListener 클래스를 구현 한 경우에만 유효합니다. 새로운 내부 클래스를 선언하는 대신 그가했던 것처럼 새 인스턴스를 만들 수도 있습니다. – skUDA

0

당신의 버튼을 R.layout.app_dialog 내부에있는 경우, 전화 :

Button btnSignIn = (Button) buttonLayout.findViewById(R.id.BTN_ID_SIGN_IN); 
Button btnCancel = (Button) buttonLayout.findViewById(R.id.BTN_ID_CANCEL); 
0

public class className extends Activity implements OnClickListener { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

      Button btnSignIn = (Button) buttonLayout.findViewById(R.id.BTN_ID_SIGN_IN); 
      Button btnCancel = (Button) buttonLayout.findViewById(R.id.BTN_ID_CANCEL); 
} 

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.BTN_ID_SIGN_IN: 
     Intent reg = new Intent(this, Your_Next_Activity.class); 
     startActivity(reg); 
     finish(); 
     break; 

    case R.id.BTN_ID_CANCEL: 
     finish(); 
     break; 

      default:break; 
} 
} 

같은 시도는을 통해 해결 얻을 것이다 희망 이.

+0

당신은 분명히 제가 활동의 바깥에서 이것을하고 있다고 말한 부분을 읽지 않았습니다. – PlanetaryFortressRush

+0

oohk .. 나는 제대로 읽지 못했다. –

관련 문제