当用户从编辑文本更新任何值时,如何调用文本Watcher

时间:2016-11-27 08:56:44

标签: android

我有按钮,在按钮上点击它创建带有值的editText,编辑文本的值取决于总编辑文本的数量。例如edittext1 = 100,当用户创建两个编辑文本时,值将像这样edittext1 = 50,edittext2 = 50等等。( value = 100 / edittext的总数)我同样为每个编辑文本设置。现在问题是用户想要从edittext更改/更新任何值,我想根据用户新输入的值更新每个edittext的值。 我希望在仅由用户更改值时调用textwatcher,在我的情况下,当用户单击按钮时它将调用。 谢谢。

这是我的代码

 public class StageForm extends BaseActivity implements View.OnClickListener {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.stage_form);

    spinnerProjectStage = (Spinner) findViewById(R.id.spinnerAddProjectStage);
    spinnerProjectList = (Spinner) findViewById(R.id.spinnerProjectList);
    stageLinearLayout = (LinearLayout) findViewById(R.id.stageProjectList);
    btnAddMoreStage = (Button) findViewById(R.id.btnAddMoreStage);

    btnAddMoreStage.setOnClickListener(this);

    getProjectStage();

}

public void onClick(View v) {
    if (v.getId() == R.id.btnAddMoreStage) {
        public void addMoreFields () {
            try {
                k++;
                flag = k;
                final LinearLayout.LayoutParams lparams;
                lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

                layout[flag] = new LinearLayout(StageForm.this);
                layout[flag].setLayoutParams(lparams);
                layout[flag].setId(flag);

                txtStageName[flag] = new EditText(StageForm.this);
                txtStageName[flag].setLayoutParams(lparams);
                txtStageName[flag].setHint("stage " + k + "");
                txtStageName[flag].setId(flag);

                txtStagePercent[flag] = new EditText(StageForm.this);
                txtStagePercent[flag].setLayoutParams(lparams);
                txtStagePercent[flag].setHint("percent");
                txtStagePercent[flag].setId(flag);

                txtStagePercent[flag].addTextChangedListener(stagePercentChangeListener);


                if (flag == 0) {
                    txtStagePercent[flag].setText(String.valueOf(totalPercent));
                } else {
                    countEditText = flag + 1;
                    calculatePercentage(countEditText, flag);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
            layout[flag].addView(txtStageName[flag]);
            layout[flag].addView(txtStagePercent[flag]);
            stageLinearLayout.addView(layout[flag]);
        }
    }
}

private void calculatePercentage(int countEditText, int flag) {
    k = flag;
    if (flag == 0) {
        //  countEditText = flag;
        lastTextBox = countEditText;
    } else {
        //  countEditText = flag;
        lastTextBox = countEditText - 1;
    }
    result = totalPercent / countEditText;
    convertFloatResult = Math.round(result);
    remainingPercent = totalPercent - (convertFloatResult * countEditText);
    lastTextValue = convertFloatResult + remainingPercent;

    try {
        if (remainingPercent == 0) {
            for (int j = 0; j <= lastTextBox; j++) {
                txtStagePercent[j].setText(String.valueOf(convertFloatResult));
            }
            txtStagePercent[lastTextBox].setText(String.valueOf(lastTextValue));

        } else {
            for (int j = 0; j < lastTextBox; j++) {
                txtStagePercent[j].setText(String.valueOf(convertFloatResult));
            }
            txtStagePercent[lastTextBox].setText(String.valueOf(lastTextValue));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private TextWatcher stagePercentChangeListener = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        if (flag == 0) {
        } else {
            String getbeforValue = String.valueOf(s);
            beforeTextChanged = Integer.parseInt(getbeforValue);
        }
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        String getchangedValue = String.valueOf(s);
        afterTextChanged = Integer.parseInt(getchangedValue);

    }

    @Override
    public void afterTextChanged(Editable s) {
        totalPercent = totalPercent - afterTextChanged;
        countEditText = countEditText - 1;
        calculatePercentage(countEditText, flag);

    }
};

}

0 个答案:

没有答案