我正在尝试在编写或将效果应用于我的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();
}
});
答案 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
。