![](/img/trans.png)
[英]How do I avoid launching dialogfragment when EditText loses focus?
[英]How do I test EditText for user content even after it loses focus?
我有一個簡單的UI屏幕,供用戶在EditText行中輸入數據,然后在第二EditText行中輸入日期。 我有一個ListenerEditText.java文件,用於監聽后退按鈕的按下。 問題是,當用戶在第一行EditText行上輸入數據,然后焦點移至第二行EditText行時,該代碼不再正確捕獲后退按鈕的按下,因為它無法識別出在第一行EditText行上輸入了數據-出現僅檢查第二行EditText行上是否有數據。 當按下后退按鈕時,我希望代碼識別出第一行EditText行和/或第二行EditText行上有數據,然后啟動DialogFragment來確認用戶是否會丟失輸入的數據。 當前,該代碼無法“看到”第一條EditText行上的數據,並且如果第二條EditText行上沒有數據,則會錯誤地將用戶帶回到上一個屏幕。
Activity.java:
import static com.example.jdw.secondscreen.ListenerEditText.KeyImeChange;
public class CardViewActivity extends AppCompatActivity {
private ListenerEditText myListenerEditText;
private ListenerEditText dListenerEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cardviewinput);
myListenerEditText = (ListenerEditText)findViewById(R.id.CEditText);
dListenerEditText = (ListenerEditText) findViewById(R.id.DEditText);
myListenerEditText.setKeyImeChangeListener(new KeyImeChange() {
@Override
public boolean onKeyIme(int keyCode, KeyEvent event) {
int stringToDo = myListenerEditText.getText().toString().trim().length();
if(stringToDo>0) {
FragmentManager fm = getSupportFragmentManager();
CreateSkycardFragment editNameDialog = new CreateSkycardFragment();
editNameDialog.show(fm, "skycard_dialog");
return false;
}
// if "dstringToDo" does not have data (the EditText input line is blank)
// then just cancel the soft keyboard and go to the previous activity.
else {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myListenerEditText.getWindowToken(), 0);
return false;
}
}
});
dListenerEditText.setKeyImeChangeListener(new KeyImeChange() {
@Override
public boolean onKeyIme(int keyCode, KeyEvent event) {
int dstringToDo = dListenerEditText.getText().toString().trim().length();
// If the EditText input line has data ("stringToDo") and the user presses the Back button,
// then launch the DialogFragment to see if they really want to delete the data and
// go back to the previous activity.
if(dstringToDo>0) {
FragmentManager fm = getSupportFragmentManager();
CreateSkycardFragment editNameDialog = new CreateSkycardFragment();
editNameDialog.show(fm, "skycard_dialog");
return false;
}
// if "dstringToDo" does not have data (the EditText input line is blank)56
// then just cancel the soft keyboard and go to the previous activity.
else {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(dListenerEditText.getWindowToken(), 0);
return false;
}
}
});
...
你可以做這樣的事情,
EditText edit = (EditText)getActivity.findViewById(R.id.your id here);
String abcd=edit.getText().toString();
並在第一個編輯文本上進行驗證,設置錯誤和其他操作。
我使用了兩個選項首先與@war_Hero相同
第一
/ 在您的edittext中添加驗證 /
myListenerEditText.setError(null);
/** Validation of View Widget **/
if (myListenerEditText.getText().toString().equalsIgnoreCase("")) {
myListenerEditText.requestFocus();
myListenerEditText.setError("Please enter your name.");
}
// Second option
myListenerEditText = (EditText) rootView.findViewById(your id);
//add addTextChangedListener to your editText and define one boolean variable boolean showPopUp=false
myListenerEditText.addTextChangedListener(watcher);
TextWatcher watcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1,int i2) {
showPopUp = true;// whenever text changed make showPopUp= true;
}
@Override
public void afterTextChanged(Editable editable) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
};
//and then override onBackPressed
@Override
public void onBackPressed() {
if (showPopUp) {
showPopUpMessage();// showPopUpMessage will show dialog
}else{
finish();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.