如何在按钮上单击android中的EditText应用撤消和重做操作

时间:2014-09-12 12:48:11

标签: android onclick android-edittext undo-redo

我正在尝试在编写或将效果应用于我的EditText时应用撤消和重做操作。为此我已经从这个Link下载了课程,然后我在我的应用程序中使用了它。

撤消

TextViewUndoRedo mTextViewUndoRedo = new TextViewUndoRedo(edtNoteDescription);
mTextViewUndoRedo.undo();

重做

TextViewUndoRedo mTextViewUndoRedo = new TextViewUndoRedo(edtNoteDescription);
mTextViewUndoRedo.redo();

但我不知道为什么这段代码不起作用,我已经把日志检查是否调用了Undo函数,不幸的是我看到它正在调用这个函数,但是它在下面的方法中。

if (edit == null) {
    return;
}

我也试过了其他一些没有运气的解决方案,所以如果有人用这种方法或任何其他方法实现了相同的方法,那么请建议一些代码或方法来实现这个功能。

修改

btnUndo.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                 TextViewUndoRedo mTextViewUndoRedo = new TextViewUndoRedo(edtNoteDescription);
                 mTextViewUndoRedo.undo();
            }
        });

1 个答案:

答案 0 :(得分:3)

问题是每次单击按钮时是否正在创建TextViewUndoRedo对象?

这就是EditHistory为空的原因,因为每次都会重新创建它。 这不行吗?

TextViewUndoRedo mTextViewUndoRedo = new TextViewUndoRedo(edtNoteDescription);

btnUndo.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        mTextViewUndoRedo.undo();
    }
});

就像我在评论中所说的那样,Undo()方法会调用mEditHistory.getPrevious(),但getPrevious()会返回null,因为在其中,它会执行:

if (mmPosition == 0) { 
    return null; 
} 

创建TextViewUndoRedo时,会创建一个新的EditHistory,并在其中mmPosition初始化为0。 由于您每次都在重新创建对象,因此mmPosition始终为0,然后返回null