1

edittext が変更されたときに変数が変更されるかどうかを確認できるように、変数が 'changed' すぎると宣言しました。

私が思う問題は、保存ボタンまたはキャンセルボタンのいずれかを押すと、ボタンをクリックしてもnullのままであるため、常に値nullが生成されることです。ただし、textwatcher は 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());

    }
}
4

1 に答える 1

0

を変更していましたchanged。しかし、あなたが変更したものはEditNewItemActivity、現在のページではなく、新しいページにあります。

これはあなたが間違えた場所です(beforeTextChangedそしてafterTextChangedあなたのGenericTextWatcher):

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

あなたはただ呼び出す必要があります:

setChanged(false);     // or true

実際、自分でアクティビティを作成するべきではありません。アクティビティは、システムで管理できるように、Android フレームワークで作成する必要があります。

于 2016-08-15T01:32:42.273 に答える