我正在尝试获取“上一个”按钮 - 这意味着在用户键入文本框之前,会为编辑文本分配一个变量。现在我试图得到它,以便在文本改变了监听器后,可以按下一个按钮返回到文本框中的前一个单词。但是,当我这样做时,我收到消息:符号无法解决。这是因为按钮的onclick监听器是一个单独的方法。我该如何分享这个变量?
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
final String previousWord = editText.getText().toString();
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
btnPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.startAnimation(animScale);
editText.setText(previousWord);
}
});
答案 0 :(得分:0)
您可以在侦听器之外声明previousWord变量。
这将允许您访问两个侦听器中的变量。
这样的事情:
private String previousWord;
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
previousWord = editText.getText().toString();
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
btnPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.startAnimation(animScale);
editText.setText(previousWord);
}
});
答案 1 :(得分:0)
首先在代码中的某处定义此类:
class MyWatcher implements TextWatcher {
private String mPrev;
private EditText mEditText;
public MyWatcher(EditText editText){
mEditText = editText;
}
public void rollback(){
mEditText.setText(mPrev);
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
mPrev = mEditText.getText().toString();
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
}
}
像这样使用:
final MyWatcher watcher = new MyWatcher(editText);
editText.addTextChangedListener(watcher);
btnPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.startAnimation(animScale);
watcher.rollback();
}
});
另一个解决方案可能是@jasonwarford的答案,但将previousWord
定义为类成员而不是局部变量。