[英]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.