これは混乱するように聞こえるかもしれないので、私と一緒に裸にしてください。私は変数を宣言しましたが、 "変更されました"ので、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());
}
}
私はあなたの提案を試みましたが、何の効果もありませんでした。変更された変数は、EditTextを変更しても変更しなくても、nullのままです。 – MedicoreProgrammer