如何在用户按下按钮后检查字符串更改?
How to check for string changes after a user presses a Button?
这个问题很难说,但解释起来很容易。
我有一个 Activity,用户可以在其中修改他们的来源和个人描述。
完成所有更改后,他们按下 "done" 按钮。
现在我想知道检查他们输入的字符串是否新颖且不等于之前的描述和来源的最佳方法。
因为...如果他们只更改描述而不更改来源,反之亦然,或者两者都更改怎么办?
不确定这样做的最佳方式。
这是我现在的 Activity。
public class EditProfile extends AppCompatActivity
{
private TextView originTV;
private EditText descriptionET;
private ImageView cameraIV, mainIV;
private Button doneButton;
private static final String EDIT_PROFILE = "EDIT_PROFILE";
private UpdateUserString updateUserString;
private int PLACE_AUTOCOMPLETE_REQUEST_CODE = 20;
private User localActivityUser;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_16e_profile_edit);
bindActivity();
}
private void bindActivity()
{
localActivityUser = Global_Class.getInstance().getValue().user;
originTV = (TextView) findViewById(R.id.editProfile_originTV);
descriptionET = (EditText) findViewById(R.id.editProfile_descriptionET);
cameraIV = (ImageView) findViewById(R.id.editProfile_cameraIV);
mainIV = (ImageView) findViewById(R.id.editProfile_imageIV);
doneButton = (Button) findViewById(R.id.editProfile_doneButton);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!localActivityUser.getDescription().equals(descriptionET.getText().toString()))
{
//Call api to update my backend.
UpdateUserStringAsyncTask updateUserStringAsyncTask = new UpdateUserStringAsyncTask("description",descriptionET.getText().toString());
updateUserStringAsyncTask.execute();
}
else if(!localActivityUser.getOrigin().equals(originTV.getText()))
{
//Call api to update my backend
UpdateUserStringAsyncTask updateUserStringAsyncTask = new UpdateUserStringAsyncTask("origin",originTV.getText().toString());
updateUserStringAsyncTask.execute();
}
}
});
}
最佳方法是不关心检查有效更改的每个组合,并将整个用户对象发送到 API。多个网络请求对您的设备资源不利。让数据库处理更新数据,即使它们是相同的。这对您的应用来说不是问题。
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// These two could be in a TextWatcher instead
localActivityUser.setDescription(
descriptionET.getText().toString());
localActivityUser.setOrigin(
originTV.getText().toString());
UpdateUserStringAsyncTask task = new UpdateUserStringAsyncTask(localActivityUser);
task.execute();
}
});
您还可以查看 Android 数据绑定库,这样您就不必担心自己维护用户 class 的状态。
这个问题很难说,但解释起来很容易。
我有一个 Activity,用户可以在其中修改他们的来源和个人描述。
完成所有更改后,他们按下 "done" 按钮。
现在我想知道检查他们输入的字符串是否新颖且不等于之前的描述和来源的最佳方法。
因为...如果他们只更改描述而不更改来源,反之亦然,或者两者都更改怎么办?
不确定这样做的最佳方式。
这是我现在的 Activity。
public class EditProfile extends AppCompatActivity
{
private TextView originTV;
private EditText descriptionET;
private ImageView cameraIV, mainIV;
private Button doneButton;
private static final String EDIT_PROFILE = "EDIT_PROFILE";
private UpdateUserString updateUserString;
private int PLACE_AUTOCOMPLETE_REQUEST_CODE = 20;
private User localActivityUser;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_16e_profile_edit);
bindActivity();
}
private void bindActivity()
{
localActivityUser = Global_Class.getInstance().getValue().user;
originTV = (TextView) findViewById(R.id.editProfile_originTV);
descriptionET = (EditText) findViewById(R.id.editProfile_descriptionET);
cameraIV = (ImageView) findViewById(R.id.editProfile_cameraIV);
mainIV = (ImageView) findViewById(R.id.editProfile_imageIV);
doneButton = (Button) findViewById(R.id.editProfile_doneButton);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!localActivityUser.getDescription().equals(descriptionET.getText().toString()))
{
//Call api to update my backend.
UpdateUserStringAsyncTask updateUserStringAsyncTask = new UpdateUserStringAsyncTask("description",descriptionET.getText().toString());
updateUserStringAsyncTask.execute();
}
else if(!localActivityUser.getOrigin().equals(originTV.getText()))
{
//Call api to update my backend
UpdateUserStringAsyncTask updateUserStringAsyncTask = new UpdateUserStringAsyncTask("origin",originTV.getText().toString());
updateUserStringAsyncTask.execute();
}
}
});
}
最佳方法是不关心检查有效更改的每个组合,并将整个用户对象发送到 API。多个网络请求对您的设备资源不利。让数据库处理更新数据,即使它们是相同的。这对您的应用来说不是问题。
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// These two could be in a TextWatcher instead
localActivityUser.setDescription(
descriptionET.getText().toString());
localActivityUser.setOrigin(
originTV.getText().toString());
UpdateUserStringAsyncTask task = new UpdateUserStringAsyncTask(localActivityUser);
task.execute();
}
});
您还可以查看 Android 数据绑定库,这样您就不必担心自己维护用户 class 的状态。