Android 如何在用户按下按钮后检查字符串更改?

Android 如何在用户按下按钮后检查字符串更改?,android,android-layout,android-button,Android,Android Layout,Android Button,这个问题很难说,但解释起来很容易 我有一个活动,用户可以在其中修改其来源和个人描述。 完成所有更改后,他们按“完成”按钮。 现在我想知道检查它们输入的字符串是否新颖且不等于前面的描述和来源的最佳方法 因为。。。如果它们只更改描述,而不更改来源,反之亦然,或者两者都更改,该怎么办? 不确定做这件事的最佳方式 这是我目前的活动 public class EditProfile extends AppCompatActivity { private TextView originTV;

这个问题很难说,但解释起来很容易

我有一个活动,用户可以在其中修改其来源和个人描述。
完成所有更改后,他们按“完成”按钮。
现在我想知道检查它们输入的字符串是否新颖且不等于前面的描述和来源的最佳方法

因为。。。如果它们只更改描述,而不更改来源,反之亦然,或者两者都更改,该怎么办?
不确定做这件事的最佳方式

这是我目前的活动

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数据绑定库,这样您就不必担心自己维护用户类的状态

最理想的方法是不必关心检查每个有效更改的组合,而是将整个用户对象发送到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数据绑定库,这样您就不必担心自己维护用户类的状态

TextWatcher
?为什么你需要一个按钮来检查文本是否已更改?好吧,如果他们更改了描述和原点,如果他们按“上一步”,那么我无法更新他们的更改。所以他们必须按done,这将在后端更新他们的字符串,然后我将它们重定向到上一个活动。您可以使用
savedInstanceState
来保存一组值。但是,如果他们回击,就不知道这是一个错误,还是故意的。强制某人按done(而不是cancel)是一个糟糕的设计,因为我的
TextWatcher
?为什么你需要一个按钮来检查文本是否已更改?好吧,如果他们更改了描述和原点,如果他们按“上一步”,那么我无法更新他们的更改。所以他们必须按done,这将在后端更新他们的字符串,然后我将它们重定向到上一个活动。您可以使用
savedInstanceState
来保存一组值。但是,如果他们回击,就不知道这是一个错误,还是故意的。强迫某人按done(而不是cancel)是一个糟糕的设计,是的,这很好。我会实施的。谢谢节省了我很多时间!啊,是的,那很好。我会实施的。谢谢节省了我很多时间!