【问题标题】:How to update method to return updated information from textwatcher after pressing button按下按钮后如何更新方法以从 textwatcher 返回更新的信息
【发布时间】:2016-08-15 00:06:46
【问题描述】:

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

我认为的问题是,当我按下保存按钮或取消按钮时,它总是会产生 null 值,因为单击按钮时它仍然为 null。但是,我认为 textwatcher 会监听 EditText 并且即使 EditText 中没有任何更改,默认情况下它也会将 SetChanged() 更改为 false,因为它提供了“实时更新”,但显然情况并非如此,我我做错了什么?还是我应该以不同的方式处理它?有什么方法可以刷新它吗?

建议将不胜感激。

(P.S 删除了一些代码以减小大小并使其看起来更容易看,所以请原谅我缺少任何大括号。此外,活动确实可以正常运行,因为它显示了布局。但是在按下任何按钮时它会导致它崩溃。)

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());

    }
}

【问题讨论】:

  • 您是否刚刚检查了您的 textwatcher 以查看它是否正常工作?编辑editText时是否看到日志?

标签: java android android-edittext textwatcher android-textwatcher


【解决方案1】:

您更改了changed。但是您更改的是新的EditNewItemActivity,而不是当前页面。

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

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

你应该打电话:

setChanged(false);     // or true

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

【讨论】:

  • 我试过你的建议,但没有效果。尽管更改或不更改 EditText,但已更改的变量仍然为空。
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多