如何在编辑文本侦听器的beforeTextChanged方法中设置变量,然后在该方法之外调用该变量?

时间:2014-08-23 15:33:30

标签: android android-edittext listener

我正在尝试获取“上一个”按钮 - 这意味着在用户键入文本框之前,会为编辑文本分配一个变量。现在我试图得到它,以便在文本改变了监听器后,可以按下一个按钮返回到文本框中的前一个单词。但是,当我这样做时,我收到消息:符号无法解决。这是因为按钮的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);

        }
    });

2 个答案:

答案 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定义为类成员而不是局部变量。