[英]Empty EditText value displayed in AlertDialog
我是 Android 开发的新手,我遇到了问题。 我有 2 个登录和密码的EditText
字段和 1 个Button
。 当我单击Button
时,我收到带有消息“登录为”的AlertDialog
,但我需要它是“登录为 *value 输入到”登录“ EditText
”。 EditText
值始终为空。 这只是一个简单的实现,但它不起作用。 我在这里做错了什么?
这是代码:
public class FirstFragment extends Fragment {
EditText loginText;
EditText passwText;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
View view2 = inflater.inflate(R.layout.fragment_first, null, false);
loginText = (EditText)view2.findViewById(R.id.loginText);
passwText = (EditText)view2.findViewById(R.id.passText);
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_first, container, false);
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick( View view) {
handleLoginDialog();
}
});
}
private void handleLoginDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//View view2 = getLayoutInflater().inflate(R.layout.fragment_first, null, false);
String st = loginText.getText().toString();
if (loginText != null && passwText != null){
builder.setMessage("Logged in as " + st);
}
else
builder.setMessage("Login or password was not entered!" );
builder.show();
}
}
我想从你所做的开始回答:
您膨胀了 2 个相同的布局:
View view2 = inflater.inflate(R.layout.fragment_first, null, false);
return inflater.inflate(R.layout.fragment_first, container, false);
让我们将第二次膨胀称为view1
,它是为Fragment
膨胀的原始视图,也是onViewCreated()
方法中返回的视图。
然后,为view1
的onClickListener
设置button_first
集。
然后,在handleDialogLogin()
方法中,您尝试获取使用view2
object 创建的EditText
字段的文本值。
这就是它出错的地方。 因为,在应用程序使用期间,您在view1
的EditText
字段中插入了文本,但您要求view2
的EditText
字段的文本值显然是空的。
正确和干净的方法在这里:
public class FirstFragment extends Fragment {
EditText loginText;
EditText passwText;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
// just inflate the layout for this fragment as it is not correct
// place for declaring and initializing views
return inflater.inflate(R.layout.fragment_first, container, false);
}
// this is the best place for declaring and initializing views
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// declare and initialize your EditText here
loginText = (EditText)view.findViewById(R.id.loginText);
passwText = (EditText)view.findViewById(R.id.passText);
view.findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick( View view) {
handleLoginDialog();
}
});
}
private void handleLoginDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
String st = loginText.getText().toString().trim();
String pt = passText.getText().toString().trim();
if (st.isEmpty() && pt.isEmpty())
builder.setMessage("Login or password was not entered!" );
else
builder.setMessage("Logged in as " + st);
builder.show();
}
}
也许你可以试试这个,但这不使用 onViewCreated
public class FirstFragment extends Fragment {
EditText loginText;
EditText passText;
Button btnLogin;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
View view2 = inflater.inflate(R.layout.fragment_first, null, false);
loginText = (EditText)view2.findViewById(R.id.loginText);
passText = (EditText)view2.findViewById(R.id.passText);
btnLogin = (Button) view2.findViewById(R.id.button_first);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleLoginDialog();
}
});
return view2;
}
private void handleLoginDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//View view2 = getLayoutInflater().inflate(R.layout.fragment_first, null, false);
String st = loginText.getText().toString().trim();
String pt = passText.getText().toString().trim();
if (st.isEmpty() && pt.isEmpty()){
builder.setMessage("Login or password was not entered!" );
}
else
builder.setMessage("Logged in as " + st);
builder.show();
}
安全的一面是在handleLoginDialog
方法loginText
作为字符串参数发送,并在那里检查字符串是否为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.