Android 查找控件时出现NullPointer异常,即使在显示视图后也是如此
我正在使用以下代码启动一个对话框:Android 查找控件时出现NullPointer异常,即使在显示视图后也是如此,android,nullpointerexception,Android,Nullpointerexception,我正在使用以下代码启动一个对话框: //show login dialog final Dialog loginDialog = new Dialog(this); loginDialog.setTitle(getString(R.string.Login)); LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVIC
//show login dialog
final Dialog loginDialog = new Dialog(this);
loginDialog.setTitle(getString(R.string.Login));
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = li.inflate(R.layout.logindialog, null);
loginDialog.setContentView(dialogView);
loginDialog.setCancelable(false);
loginDialog.show();
Button cmdLogin = (Button)findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)findViewById(R.id.cmdSignup);
if(cmdLogin==null)Log.d("Null Check","cmdLogin");
if(cmdSignup==null)Log.d("Null Check","cmdSignup");
R.layout.logindialog
的XML文件是
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/txtEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="@string/EmailAddress"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip"
/>
<EditText
android:id="@+id/txtPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="@string/Password"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip"
/>
<Switch
android:id="@+id/switchRemember"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/RememberMe"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
/>
<LinearLayout
android:id="@+id/ButtonBoxes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/cmdSignup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Signup" />
<Button
android:id="@+id/cmdLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Login" />
</LinearLayout>
</LinearLayout>
注意第一个代码段中对Java代码的两个null检查,它们返回null。我找不到原因:|你应该找到以下几点
Button cmdLogin = (Button)dialogView.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)dialogView.findViewById(R.id.cmdSignup);
现在,您正在“活动”布局而不是对话框布局中搜索,查找按钮id的代码应如下所示:
Button cmdLogin = (Button)loginDialog.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)loginDialog.findViewById(R.id.cmdSignup);
使用查看对话框查看获取按钮
Button cmdLogin = (Button)dialogView.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)dialogView.findViewById(R.id.cmdSignup);
您必须从对话框视图中获取视图
Button cmdLogin = (Button) dialogView.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button) dialogView.findViewById(R.id.cmdSignup);
没有指定视图的findViewById将从主活动的视图中获取子视图。因此,只有您返回空值。请尝试以下操作:
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = li.inflate(R.layout.logindialog, null);
loginDialog.setContentView(dialogView);
loginDialog.setCancelable(false);
loginDialog.show();
Button cmdLogin = (Button)loginDialog.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)loginDialog.findViewById(R.id.cmdSignup);
if(cmdLogin==null)Log.d("Null Check","cmdLogin");
if(cmdSignup==null)Log.d("Null Check","cmdSignup");