【问题标题】:How do I capture the value of a Material drop down menu selection in Java?如何在 Java 中捕获 Material 下拉菜单选择的值?
【发布时间】:2020-07-22 16:52:00
【问题描述】:

我正在使用 Material 在 android studio 中使用 Java 设计一个带有下拉列表的表单。

我想将用户从下拉列表中所做的选择保存到一个字符串中,以便我可以将其保存到 Firebase,但是当我尝试记录结果时,它显示选择为空。

有谁知道我如何捕捉用户从这种类型的下拉菜单中选择的内容?我之前确实有一个 Spinner 可以工作,但这似乎并没有以同样的方式工作。

我的XML代码如下

 <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/cpdTypeLayout"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginEnd="16dp"
            android:hint="Activity Type">

            <AutoCompleteTextView
                android:id="@+id/cpdType"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="none" />
        </com.google.android.material.textfield.TextInputLayout>

我的 AddAdactivity.java 代码是

//CPD TYPE DROPDOWN MENU
    cpdTypeLayout = findViewById(R.id.cpdTypeLayout);
    cpdType = findViewById(R.id.cpdType);

    String[] type = new String[]{
            "Formal Education Completed", "Other Completed", "Professional Activities", "Self-Directed Learning", "Work-Based Learning"
    };

    ArrayAdapter<String> adapterType = new ArrayAdapter<>(
            AddActivity.this,
            R.layout.dropdown_item,
            type
    );

    cpdType.setAdapter(adapterType);

    cpdType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            selectedTypeResult = parent.getItemAtPosition(position).toString();
        }

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

        }
    });

    Log.d("TAG", "You have selected " + selectedTypeResult);

编辑:已经尝试过,但没有运气。

((AutoCompleteTextView)cpdTypeLayout.getEditText()).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            adapterType.getItem(position);
            String typeItem = ((AutoCompleteTextView)cpdTypeLayout.getEditText()).getText().toString();
            Log.d("TAG", "selected type is:" + typeItem);

        }

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

        }
    });

【问题讨论】:

  • 您的日志中 selectedType 的值是多少????
  • Logcat 说“你选择了 null”

标签: java android android-spinner android-textinputlayout material-components-android


【解决方案1】:

要获得String,您只需使用:

String selectedValue =((AutoCompleteTextView)textInputLayout.getEditText()).getText();

否则,如果你想使用监听器,你可以使用类似的东西:

    ((AutoCompleteTextView)textInputLayout.getEditText()).setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            String selectedValue = arrayAdapter.getItem(position);
        }
    });

【讨论】:

  • 感谢您对此的回复。我已经使用此代码(在我对原始问题的编辑中)进行了尝试,假设我已经理解您的意思,没有任何记录。
  • @smose arrayAdapter.getItem(position); 是选择的值。您可以随意使用它。 2个选项是可选的。不要在监听器中使用getEditText().getText
  • 我尝试将 arrayAdapter.getItem(position) 转换为字符串并记录它,但在我的日志猫中没有得到任何结果,我不知道为什么。
  • @smose 您正在使用setOnItemSelectedListener。在答案中我使用setOnItemClickListener。它们是不同的。
  • 啊,没发现!非常感谢,现在可以使用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多