0

これは混乱するように聞こえるかもしれないので、私と一緒に裸にしてください。私は変数を宣言しましたが、 "変更されました"ので、edittextが変更されたときに変更されるかどうかを確認できます。ボタンを押した後、textwatcherから更新された情報を返すメソッドを更新するにはどうすればよいですか? (Android、Java)

保存ボタンまたはキャンセルボタンのいずれかを押すと、ボタンをクリックするとまだnullですので、値nullを生成します。しかし、私はテキストウォッチャーがEditTextを聞いて、EditTextで何も変更されていなくても、デフォルトでSetChanged()をfalseに変更して「ライブアップデート」を提供していると思っていましたが、明らかにそうではありません。私は何か間違っている?または別の方法でそれにアプローチする必要がありますか?それをリフレッシュする方法はありますか?

アドバイスをいただければ幸いです。

(PSサイズを小さくして目で見やすくするためにいくつかのコードが削除されていますので、不足している中括弧は私にご容赦ください。ボタンをクリックするとクラッシュする)

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

changedを変更しました。しかしあなたが変更したものは、あなたの新しいページEditNewItemActivityにありません。

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

あなただけ呼び出す必要があります:あなたは(あなたのGenericTextWatcherbeforeTextChangedafterTextChanged)ミスをしたところ

これ

は実際に

setChanged(false);  // or true 

、あなたがすべきではない、新たな活動を自分で、活動Androidフレームワークで作成して、システムで管理できるようにする必要があります。

+0

私はあなたの提案を試みましたが、何の効果もありませんでした。変更された変数は、EditTextを変更しても変更しなくても、nullのままです。 – MedicoreProgrammer

関連する問題