1

我在 Java 类中执行以下操作,而不是在 Activity 中。

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 的情况下尝试我的代码时,按钮会完美显示(尽管当我点击它们时没有任何反应)。为什么它不让我为按钮设置任何东西?

4

4 回答 4

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) { ... }});
于 2012-07-14T01:19:10.900 回答
0

你怎么 btnSignIn.setOnClickListener(this)没有错过它?

xml中的ID不应该只是小写吗?

于 2012-07-14T01:17:04.240 回答
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);
于 2012-07-14T01:23:56.033 回答
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;
}
}

希望你能通过这个得到解决。

于 2012-07-14T06:07:34.577 回答