我正在尝试对 EditText 进行空检查(这应该很简单),但是每次我在两个 ET 中输入文本时 - 它们总是返回空:“”并且它们不应该(如果它们中有文本) 。
我查看了其他几篇与此相关的 SO 文章,但似乎没有一个修复程序可以解决该问题。
有人能发现我在这种情况下可能做错了什么吗?
源代码 fragment :
Java 类:
...
public void doneClicked(View v) throws JSONException {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v1 = li.inflate(R.layout.profile_notification_settings_list_edit, null);
final EditText label = (EditText) v1.findViewById(R.id.emaillabel);
final EditText value = (EditText) v1.findViewById(R.id.emailvalue);
String sValue = value.getText().toString();
if (sValue.matches("")) {
Toast.makeText(this, "You did not enter a value", Toast.LENGTH_SHORT).show();
return;
}
String sLabel = label.getText().toString();
if (sLabel.matches("")) {
Toast.makeText(this, "You did not enter a label", Toast.LENGTH_SHORT).show();
return;
}
...
适配器:
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
view = inflater.inflate(R.layout.profile_notification_settings_list_edit, null);
EditText value = (EditText) view.findViewById(R.id.emailvalue);
value.setHint("Value");
value.setText(valueList[i]);
EditText label = (EditText) view.findViewById(R.id.emaillabel);
if (labelList != null)
label.setHint("Label");
label.setText(labelList[i]);
完整来源:
Java 类:
适配器:
最佳答案
因为每次单击都会创建一个新的 View
,它与屏幕上当前显示的 View 无关
public void doneClicked(View v) throws JSONException {
// don't inflate new views
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v1 = li.inflate(R.layout.profile_notification_settings_list_edit, null);
final EditText label = (EditText) v1.findViewById(R.id.emaillabel);
final EditText value = (EditText) v1.findViewById(R.id.emailvalue);
// ... code
注意 :您无法直接从 ListView
获取 rowItemVies
的数据,因此您需要在适配器类中添加方法来获取您可以使用 yourListView.getChildAt(position)
获取 rowView
的选定位置,并进一步从 rowView
中的子项获取数据
关于java - EditText 不断返回空 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47289306/