1

我已经声明了我的变量,'changed' too null 以便我可以检查它是否在编辑文本更改时发生更改,

我认为的问题是,当我按下保存按钮或取消按钮时,它总是会产生 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页面而不是当前页面。

这是你犯错的地方(beforeTextChangedafterTextChanged你的GenericTextWatcher):

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

你应该打电话给:

setChanged(false);     // or true

事实上,你不应该自己新建一个activity,activity必须由Android Framework创建才能被系统管理。

于 2016-08-15T01:32:42.273 回答