android - 如何在android中单击按钮时将撤消和重做操作应用于EditText

标签 android onclick android-edittext undo-redo

我正在尝试在我的 EditText 中写入或应用效果时应用撤消和重做操作。为此,我已经从这个 Link 下载了类(class)然后我在我的应用程序中像这样使用它。

用于撤消

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();
            }
        });

最佳答案

问题可能是每次单击按钮时您都在创建 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

关于android - 如何在android中单击按钮时将撤消和重做操作应用于EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808701/

相关文章:

android - 获取布局宽度并在 onGlobalLayoutListener 中设置新的宽度值

Android WebView 协议(protocol)处理程序

javascript - 在不同组件之间传递从 onClick 事件接收到的值

android - 在 listview 上过滤消失列表项,同时在 edittext 中输入内容

android - 矢量绘图不显示垂直线

javascript - 在 Android webview 上,当我执行 javascript 时,sotfkeyboard 消失了

javascript - 如何获取 HTML 按钮的 textValue

javascript - 在 React.js 中使用 handleClick 更改 boolean 值

android - 在 EditText 上禁用键盘

android - 使用 Android 5 以编程方式更改一种 EditText 颜色会更改整个应用程序中的 EditText 颜色