所以这是另一个已经提出了一百万次的问题,但我仍然做错了什么。使用EditText.getText()返回一个空字符串。
我是在我做过的小型自定义对话框中这样做的。我是否使用AlertDialog Builder构建它,这可能会导致问题?我现在真的不知道。
我曾尝试过的一些事情/关于我对此问题的了解:
我在“确定”按钮的点击监听器中检查文本,因此我没有尝试在有一个值之前获取值,这是我看到的一个常见错误
我在XML中为EditText对象设置了ID,调试器似乎表明我已正确引用它们。
我尝试在onCreateDialog方法之外定义EditText对象并且没有改变(尽管我很好奇,这是更好的做法)。
在getText()之前使用EditText.setText()将允许它返回setText()中使用的参数,但它似乎没有获取用户输入的值。
这是我的自定义Dialog Fragment:
public class GPSLocationDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.gps_dialog, null);
final EditText latitudeText = (EditText) view.findViewById(R.id.latitude);
final EditText longitudeText = (EditText) view.findViewById(R.id.longitude);
// Define the dialog
builder.setView(inflater.inflate(R.layout.gps_dialog, null))
.setMessage("Manually input a GPS address")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.d("myTag", "Text: " + latitudeText.getText()); // This prints ""
// These throw errors since they're trying to parse "" as a double
double latitude = Double.parseDouble(latitudeText.getText().toString());
double longitude = Double.parseDouble(longitudeText.getText().toString());
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
以下是我从我的活动中调用Dialog的方法:
GPSLocationDialogFragment gpsDialog = new GPSLocationDialogFragment();
gpsDialog.show(getFragmentManager(), "GPSDialog");
这是我的布局.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/longitude"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:layout_marginBottom="4dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:hint="@string/longitude"
android:inputType="numberSigned|numberDecimal" />
<EditText
android:id="@+id/latitude"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:layout_marginBottom="4dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:hint="@string/latitude"
android:inputType="numberSigned|numberDecimal" />
</LinearLayout>
如果需要更多上下文,我可以分享它,我试图简化为相关代码。
答案 0 :(得分:1)
尝试更改此内容:
builder.setView(inflater.inflate(R.layout.gps_dialog, null))
到此:
builder.setView(view)
发生的事情是您将gps_dialog xml膨胀并将其布局层次结构转换为视图。然后你找到EditText&a;并指定对它们的引用。
然而,通过致电setView(inflater.inflate(R.layout.gps_dialog, null))
而不是传递您已经膨胀的视图,并且您的子EditText是您对对话框的引用,您正在做的是膨胀gps_dialog.xml的 new 版本和将那个传递给对话框。您拥有的参考文献是不在屏幕上的EditText。