我从编辑文本中获取用户信息。我有一个听众,在点击提交后获取他们输入的信息,但是我想在点击后退或点击其他地方后获得输入的信息:
例如,如果用户点击黑色空格,我想获取他们输入的文本。 如果他们键入" hello",然后单击返回而不是"输入",我仍然希望得到文本问候。但是,如果他们没有输入任何内容,我就不在乎他们的意见。我怎样才能做到这一点?
谢谢,
Ruchir
答案 0 :(得分:1)
首先将这些添加为类变量
private String inputText;
private EditText yourEditText;
获取EditText视图的实例
yourEditText = (EditText)findViewById(R.id.your_editText);
单击按钮时,您可以像这样获取EditText字段的内容
Button mButton = (Button)findViewById(R.id.m_button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
inputText = yourEditText.getText().toString();
}
});
如果用户按下“返回”按钮,您可以获得输入(如果有的话)
@Override
public void onBackPressed() {
inputText = yourEditText.getText().toString();
super.onBackPressed();
}
然后检查是否有任何值分配给您的String变量
if(inputText.equals("") || inputText == null){
// there is no value
}else{
// there is value entered.
}
扩展我的解决方案以点击其他地方
添加一个类变量
private boolean isEditTextHasFocus;
然后创建一个焦点监听器,它将检查Edittext是否具有焦点
private View.OnFocusChangeListener focusListener = new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
isEditTextHasFocus = true;
} else {
isEditTextHasFocus = false;
}
}
}
在onCreate(Bundle savedInstanceState)
方法
yourEditText.setOnFocusChangeListener(focusListener);
然后覆盖到onTouchEvent(MotionEvent event)
侦听器并在调用key up动作时访问Edittext输入
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if(!isEditTextHasFocus){
inputText = yourEditText.getText().toString();
}
}
return true;
}
我希望这会让您进一步了解找到您独特的解决方案。
答案 1 :(得分:0)
Save entered text in editText via button那可以是一个解决方案
答案 2 :(得分:0)
覆盖按下后退按钮时发生的情况是不好的做法,对于您想要做的事情是不必要的。
您需要使用名为onFocusChangedListener的特殊侦听器。只要元素获得或失去焦点,就会调用此函数。在这种情况下,只要有人点击它或离开,就会调用editText。按后退按钮或以任何方式离开editText将调用此功能。在下面的代码中,我检查是否
if(!username.hasFocus())
这使得只有当editText中的焦点丢失而不是每次焦点都改变时,才会保存该值。
您尚未添加任何自己的代码,因此我只想在代码示例中使用明显的占位符变量。
Edittext username = (EditText findViewById(R.id.YOUR_EDITTEXTS_ID);
String previousValue = ""; // to keep track of value change
String usernameValue = "";
username.setOnFocusChangeListener(new View.OnFocusChangeListener(
{
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (username.hasFocus()){
//take note of value for comparison when clicking away
previousValue = username.getText().toString();
} else if (!username.hasFocus()){
// check if value has changed
if (!previousValue.equals(username.getText().toString()){
usernameValue = username.getText().toString();
}
}
}
});