如果Spinner或EditText发生更改,请更改TextView

时间:2015-08-02 11:40:20

标签: android android-layout android-activity

我是android开发的初学者。我有TextViewSpinnerEditTextTextView将根据SpinnerEditText进行更改,我知道该怎么做。 我的问题是如何让SpinnerEditText一起工作,所以当我从Spinner中选择一个项目时,它会在打印之前检查EditText中的内容在TextView中,EditText必须相同。

EditText代码。

mEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!mEditText.getText().toString().trim().isEmpty()) {
                value = Double.parseDouble(mEditText.getText().toString());

                mTextView.setText(value + "");
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

Spinner代码:

mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (mMapUnit.containsKey(lengthKey[position])) {
                if (!mEditText.getText().toString().trim().isEmpty()) {
                    value = Double.parseDouble(mEditText.getText().toString());

                    // calculate

                    mTextView.setText(result + "");
                }
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

2 个答案:

答案 0 :(得分:0)

你可以简单地使用布尔变量来检查EditText或Spinner的条件。 为Spinner和EditText创建默认值为false的boolean。 在TextWatcher的afterTextChanged子方法中,在Spinner中将其布尔值设置为true,在另一侧(Spinner和EditText)中检查它。

也许这个帮助。

答案 1 :(得分:0)

您可以使用此方法将文本文本和所选项目放在TextView

mEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!mEditText.getText().toString().trim().isEmpty()) {
                value = Double.parseDouble(mEditText.getText().toString());

                mTextView.setText(value + "" + mSpinner.getAdapter().getItem(mSpinner.getSelectedItemPosition()).toString());
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (mMapUnit.containsKey(lengthKey[position])) {
                if (!mEditText.getText().toString().trim().isEmpty()) {
                    value = Double.parseDouble(mEditText.getText().toString());

                    // calculate

                    mTextView.setText(value + "" + mSpinner.getAdapter().getItem(position).toString());
                }
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

对上述代码的一点解释:

我想你知道适配器是什么,但我会解释它; 适配器是一个对象,它包含需要在视图中显示的信息(在本例中为Spinner)。

该适配器附加到Spinner视图,并通过调用该方法 mSpinner .getAdapter()

您将获得附加到Spinner的适配器的实例。 由于Spinner与适配器一起大量工作,因此Spinner中项目的位置将位于适配器中的相同位置。

所以你可以调用mSpinner.getAdapter() .getItem(position); 来获取位置位置的项目。

然后您应该看到适配器用于ListTypes的内容。如果它是一个字符串你可以做

String itemText = ((String) mSpinner.getAdapter()。getItem(position);

当调用onTextChanged回调时,EditText的文本会发生更改(或更改),并且不会考虑Spinner。所以你没有获得Spinner的参数(例如当前位置或id)。因此,您需要通过上面的解释手动获取它。

当调用OnItemSelected回调时,Spinner发生了变化,正如您现在可能猜到的那样,这次我们确实有了我所谈到的那些参数。因此,您不需要获取所选项(这很危险,因为Spinner仍然可以处理更改,并且微调器的selectedItem可能与回调提供的位置不同)

所以你必须使用回调的position参数。

由于我找不到“result”变量,我假设您在OnItemSelectedListener中表示“value”变量。

古德勒克!