【发布时间】:2015-09-23 02:03:37
【问题描述】:
我有一个简单的 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;
}
}
});
...
【问题讨论】:
标签: android android-edittext ime