2014-09-12 6 views
2

내 EditText를 작성하거나 효과를 적용하는 동안 실행 취소 및 다시 실행 조작을 적용하려고합니다. 이를 위해 나는이 Link 클래스를 다운로드 한 다음 내 응용 프로그램에서 이것을 사용했습니다. 취소를 들어적용 방법 단추의 EditText에 실행 취소 및 다시 실행을 클릭하십시오. android

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

다시 실행

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

하지만이 코드가 작동하지 않는 이유를 모르겠어요, 나는 로그를 넣고 확인했다 여부를 기능 취소 불렀다 또는 불행히도 나는 그것이이 함수를 호출하는 것을 보았으나 메소드 아래에있다.

if (edit == null) { 
    return; 
} 

나는 또한 행운과 다른 솔루션을 시도, 그래서이 방법으로 또는 다른 방법으로 동일하게 구현 한 사람은 다음 해 주시기 바랍니다 경우 일부 코드 또는이 기능을 구현하는 방법을 제안했다.

편집 당신이 TextViewUndoRedo 객체에게 버튼을 클릭 할 때마다 생성되는 것을

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

'Queue' 또는'Stack'을 사용하여 자신의'UNDO/REDO'를 구현할 수 있습니다 ... – nem035

+0

'EditHistory' 안에서'mmPosition'이 0이기 때문에'getPrevious()'메소드는 null을 리턴합니다. 기록이 비어 있습니다. 빈 편집 텍스트에서 실행 취소를 호출 할 수 있습니까? – nem035

+0

@emem, 먼저 답장을 보내 주셔서 감사합니다. 아니요, 빈 편집 상자에서 실행 취소를 적용하고 있지 않습니다. 그리고 다른 것은 작업을 수행 한 후에 왜 EditHistory가 0인지입니다. 나는 그것을 얻지 못합니까? – InnocentKiller

답변

2

이 문제가 될 수 있을까요?

그 이유는 매번 EditHistory이 비어 있기 때문입니다. 이 기능이 작동하지 않습니까? 내가 코멘트에 말했듯이

TextViewUndoRedo mTextViewUndoRedo = new TextViewUndoRedo(edtNoteDescription); 

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

Undo() 방법은 호출 mEditHistory.getPrevious()하지만 getPrevious() 반환 null 그것의 내부가, 그것을 실행하기 때문에 : TextViewUndoRedo가 생성되면, 새로운 EditHistory은 내부

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

을 생성하고 mmPosition은 0으로 초기화됩니다. 매번 객체를 다시 만들고 있으므로 mmPosition은 항상 0이고 null이됩니다.

+0

고맙습니다. 이제 작동 중입니다. – InnocentKiller

+0

@InnocentKiller 아무 문제 없어, 도와 줘서 기쁩니다 :) – nem035