gpt4 book ai didi

java - 如何更新方法以在按下按钮后从文本观察器返回更新的信息

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:58 24 4
gpt4 key购买 nike

我已经声明我的变量“changed”太空,以便我可以在编辑文本更改时检查它是否更改,

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

建议将不胜感激。

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

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

}
}

最佳答案

您已更改已更改。但您所做的更改是在新的 EditNewItemActivity 中,而不是在当前页面中。

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

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

你应该只调用:

setChanged(false);     // or true

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

关于java - 如何更新方法以在按下按钮后从文本观察器返回更新的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38947740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com