如何使用膨胀布局访问自定义DialogPreference中的小部件?

林非常新的android和Im试图加载/持久化我的自定义DialogPreference的值。 目前,这失败了,因为findViewById返回null。 我(尝试)做的方式是正确的吗? 如何在代码中访问我的EditText小部件?

public class AddressDialogPreference extends DialogPreference { public AddressDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.address_dialog); } @Override protected void onBindDialogView(View view) { EditText idField = (EditText) view.findViewById(R.id.hostID); EditText ipField = (EditText) view.findViewById(R.id.hostIP); SharedPreferences pref = getSharedPreferences(); idField.setText(pref.getString(getKey() + "_id","ExampleHostname")); ipField.setText(pref.getString(getKey() + "_ip","192.168.1.1")); super.onBindDialogView(view); } @Override protected void onDialogClosed(boolean positiveResult) { if(!positiveResult) return; Dialog myDial = getDialog(); EditText idField = (EditText) myDial.findViewById(R.id.hostID); EditText ipField = (EditText) myDial.findViewById(R.id.hostIP); SharedPreferences.Editor editor = getEditor(); editor.putString(getKey() + "_id",idField.getText().toString()); editor.putString(getKey() + "_ip",ipField.getText().toString()); } 

address_dialog.xml:

 <TextView android:text="Insert IP address" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/hostIP" /> <TextView android:text="Insert identifier" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/hostID" /> 

Related of "如何使用膨胀布局访问自定义DialogPreference中的小部件?"

好吧,我自己find了。 那么,我仍然不知道是什么导致了这个错误,但是我对布局和代码做了很多改变,突然之间就发生了变化。 我试图恢复到我在这里发布的代码,但我不能重现错误。 我张贴我的工作代码,所以遇到这个问题的任何人,可能会使用它。

pipe理员也可以select删除这篇文章,因为它可能无法重现错误。

这是布局:

 <?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"> <TextView android:text="Insert IP address" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/AddressBox" /> <TextView android:text="Insert identifier" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/HostnameBox" /> </LinearLayout> 

和AddressDialogPreference.java:

 public class AddressDialogPreference extends DialogPreference { private EditText ipBox; private EditText hostBox; public AddressDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.address_dialog); } @Override protected void onBindDialogView(View view) { ipBox = (EditText) view.findViewById(R.id.AddressBox); hostBox = (EditText) view.findViewById(R.id.HostnameBox); SharedPreferences pref = getSharedPreferences(); hostBox.setText(pref.getString(getKey() + "_host","ExampleHostname")); ipBox.setText(pref.getString(getKey() + "_ip","192.168.1.1")); super.onBindDialogView(view); } @Override protected void onDialogClosed(boolean positiveResult) { if(!positiveResult) return; SharedPreferences.Editor editor = getEditor(); editor.putString(getKey() + "_host",hostBox.getText().toString()); editor.putString(getKey() + "_ip",ipBox.getText().toString()); editor.commit(); super.onDialogClosed(positiveResult); } }