android - 如果 Spinner 或 EditText 更改,则更改 TextView

标签 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) {

        }
    });

旋转器代码:

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) {

        }
    });

最佳答案

您可以使用此方法将编辑文本和所选项目的文本放入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) {

        }
    });

上面代码的一点解释:

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

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

您将获得连接到 Spinner 的适配器实例。 因为 Spinner 与适配器大量协同工作,所以 Spinner 中的项目位置将与适配器中的位置相同。

因此您可以调用 mSpinner.getAdapter().getItem(position); 获取位置 position 上的项目。

然后您应该看到适配器对 ListTypes 使用了什么。如果它是一个字符串,你可以这样做

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

当 onTextChanged 回调被调用时,EditText 的文本改变(或被改变)并且它不考虑 Spinner。所以你得不到 Spinner 的参数(比如当前位置或 id)。因此,您需要按照上面的说明手动获取它。

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

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

由于找不到“result”变量,我假设您指的是 OnItemSelectedListener 中的“value”变量。

祝你好运!

关于android - 如果 Spinner 或 EditText 更改,则更改 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771542/

相关文章:

android - ScrollView 没有滚动到 CardView 的末尾

android - 我无法使用小米红米 4x 启动 Appium

java - 在 Android 中查找并暂停播放音频的任务

java - 无法在 Release模式下启动 Activity(使用 proguard-android-optimize 配置)

android - 生成的 .aar 文件给出空的 classes.jar

android - GoogleSignIn.getLastSignedInAccount() 在发布版本上返回 null

java - Android Wear NullPointerException 无法在 TextView 上设置文本

android - ActionBar 中的全角微调器

Android 布局 - 何时使用应用程序 : vs android:?

java - 致命异常 : main- I have no idea what's wrong