我正在使用以下代码启动一个对话框:
//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。我找不到原因:|
答案 0 :(得分:3)
您应该找到如下
Button cmdLogin = (Button)dialogView.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)dialogView.findViewById(R.id.cmdSignup);
答案 1 :(得分:1)
现在你正在搜索活动布局而不是在对话框布局中,找到按钮id的代码应该是这样的:
Button cmdLogin = (Button)loginDialog.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)loginDialog.findViewById(R.id.cmdSignup);
答案 2 :(得分:1)
使用View dialogView
获取按钮..
Button cmdLogin = (Button)dialogView.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)dialogView.findViewById(R.id.cmdSignup);
答案 3 :(得分:1)
您必须从对话框视图中获取视图。
Button cmdLogin = (Button) dialogView.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button) dialogView.findViewById(R.id.cmdSignup);
没有指定视图的 findViewById 将从主要活动的视图中获取子视图。所以只有你返回null。
答案 4 :(得分:1)
试试这个:
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");