0

맞아, 혼란 스러울 정도로 들키지 않을 수 있습니다. 내 변수를 선언했는데 '변경됨'너무 커서 edittext가 변경 될 때 변경 여부를 확인할 수 있습니다.버튼을 누른 후 textwatcher에서 업데이트 된 정보를 반환하는 메소드를 업데이트하는 방법은 무엇입니까? (Android, Java)

저장 단추 또는 취소 단추를 누르면 항상 문제가됩니다. 버튼을 클릭해도 null 인 null 값을 생성합니다. 그러나 Textwatcher가 EditText를 듣고 EditText에서 아무 것도 변경되지 않았더라도 기본적으로 SetChanged()가 "라이브 업데이트"를 제공함에 따라 false로 변경 될 것이라고 생각했습니다. 그러나 분명히 그렇지 않습니다. 내가 뭔가 잘못하고 있는거야? 아니면 다른 방식으로 접근해야합니까?, 그것을 상쾌하게 할 수있는 방법이 있습니까?

조언을 주시면 감사하겠습니다.

(추신 : 일부 코드는 크기를 줄이고 눈에 쉽게 보이도록 삭제되었으므로 놓친 중괄호는 실례합니다. 또한 레이아웃이 표시된대로 활동이 제대로 실행됩니다. 버튼이 충돌이 발생합니다.) 당신은 changed을 변경했다

public class EditNewItemActivity extends AppCompatActivity{ 

private Boolean changed = null; 
private TextView title,content; 
private Button saveBtn,cancelBtn; 
private String date; 
private int id; 


@Override 

protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit_item); 

    title = (TextView) findViewById(R.id.editItemTitle); 
    content = (TextView) findViewById(R.id.editItemDescription); 
    saveBtn = (Button) findViewById(R.id.editItemSaveBtn); 
    cancelBtn = (Button) findViewById(R.id.editItemCancelBtn); 

    Bundle extras = getIntent().getExtras(); 
    title.setText(extras.getString("title")); 
    content.setText(extras.getString("content")); 

    date = extras.getString("date"); 
    id = extras.getInt("id"); 

    GenericTextWatcher textWatcher = new GenericTextWatcher(); 

    title.addTextChangedListener(textWatcher); 
    content.addTextChangedListener(textWatcher); 

    ClickEvent clickEvent = new ClickEvent(); 

    saveBtn.setOnClickListener(clickEvent); 
    cancelBtn.setOnClickListener(clickEvent); 


} 

private class ClickEvent implements View.OnClickListener{ 

    @Override 
    public void onClick(View v) { 

     switch (v.getId()){ 

      case R.id.editItemSaveBtn: 

       save(); 

       break; 

      case R.id.editItemCancelBtn: 

       cancel(); 
       break; 
     } 
    } 
} 

private void cancel() { 

    if (getChanged() == null){ 

    //This was used to simply verify that getchanged was still null. 
    } 

    if (title.getText().toString() != "" || content.getText().toString() != ""){ 


     if (getChanged() == false) { 

// if nothing has been changed let it cancel etc 
     }else { 

     } 
    } 
} 

private void save() { 

    if (tempTitle != "" || tempContent != "") { 

     if(getChanged() == true){ 
} 

} 

public Boolean getChanged() { 
    return changed; 
} 

public void setChanged(Boolean changed) { 
    this.changed = changed; 
} 

private class GenericTextWatcher implements TextWatcher{ 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     Log.v("Beforetext:", s.toString()); 
     EditNewItemActivity editItem = new EditNewItemActivity(); 

     editItem.setChanged(false); 

    } 



    @Override 
    public void afterTextChanged(Editable s) { 

     Log.v("afterTextChanged:", s.toString()); 

     EditNewItemActivity editItem = new EditNewItemActivity(); 

     editItem.setChanged(true); 

     Log.v("Status:", editItem.getChanged().toString()); 

    } 
} 

답변

0

. 하지만 변경 한 내용은 현재 EditNewItemActivity의 새 페이지에 있습니다.

EditNewItemActivity editItem = new EditNewItemActivity(); 
editItem.setChanged(false); //or true 

당신은 단지 호출해야합니다 : 당신이 (당신의 GenericTextWatcherbeforeTextChangedafterTextChanged) 실수를 한 곳

는 사실

setChanged(false);  // or true 

, 당신은해야하지 새로운 활동 자신을, 활동 시스템이 관리 할 수 ​​있도록 Android 프레임 워크에서 만들어야합니다.

+0

나는 당신의 제안을 시도했지만 효과가 없었습니다. 변경된 변수는 EditText를 변경하거나 변경하지 않더라도 null로 유지됩니다. – MedicoreProgrammer