我有一個簡單的用戶界面屏幕,用於在EditText行中輸入數據,然後在第二個EditText行中輸入日期。我有一個偵聽後退按鈕的ListenerEditText.java文件。問題是當用戶在第一個EditText行輸入數據,然後焦點移動到第二個EditText行時,代碼不再捕獲後退按鈕,因爲它無法識別數據是在第一個EditText行中輸入的 - 它顯示只檢查第二個EditText行是否有數據。當按下後退按鈕時,我希望代碼識別第一個EditText行和/或第二個EditText行上有數據,然後啓動DialogFragment以確認用戶是否會丟失輸入的數據。目前,代碼不會「看到」第一個EditText行上的數據,並且如果第二個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;
}
}
});
...
我不明白。在您的解決方案中使用「getActivity」是否有助於增加主鍵?如果是這樣,怎麼樣?我還需要確保第二個EditText已經過數據測試。是「字符串abcd ...」一個字符串還是你的意思是任何和所有的字符串? – AJW
如果您在使用getActivity()方法的片段中使用它,則不使用getActivity()。如果您在活動中執行此操作,則使用findViewById() –