如何在Java中捕获材质下拉菜单选择的值?

如何在Java中捕获材质下拉菜单选择的值?,java,android,android-spinner,android-textinputlayout,material-components-android,Java,Android,Android Spinner,Android Textinputlayout,Material Components Android,我正在使用Java在android studio中使用Material设计一个带有下拉列表的表单 我想将用户从下拉列表中做出的选择保存为字符串,以便将其保存到Firebase,但当我尝试记录结果时,它会显示选择为空 有人知道我如何捕捉用户从这种下拉菜单中选择的内容吗?我以前确实有一个旋转器,它可以工作,但它似乎不能以同样的方式工作 我的XML代码如下 <com.google.android.material.textfield.TextInputLayout an

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

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

有人知道我如何捕捉用户从这种下拉菜单中选择的内容吗?我以前确实有一个旋转器,它可以工作,但它似乎不能以同样的方式工作

我的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);
//CPD类型下拉菜单
cpdTypeLayout=findViewById(R.id.cpdTypeLayout);
cpdType=findviewbyd(R.id.cpdType);
字符串[]类型=新字符串[]{
“已完成正规教育”、“其他已完成”、“专业活动”、“自主学习”、“基于工作的学习”
};
ArrayAdapter适配器类型=新的ArrayAdapter(
这个,,
R.layout.dropdown_项,
类型
);
设置适配器(adapterType);
cpdType.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
selectedTypeResult=parent.getItemAtPosition(position.toString();
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
Log.d(“标记”、“您已选择”+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) {

        }
    });
((AutoCompleteTextView)cpdTypeLayout.getEditText()).setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
adapterType.getItem(位置);
字符串类型项=((AutoCompleteTextView)cpdTypeLayout.getEditText()).getText().toString();
Log.d(“标记”,“所选类型为:”+typeItem);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});

要获取
字符串
,您只需使用:

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);
        }
    });
((AutoCompleteTextView)textInputLayout.getEditText()).setOnItemClickListener(新的AdapterView.OnItemClickListener()){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
String selectedValue=arrayAdapter.getItem(位置);
}
});

您的日志中selectedType的值是多少???Logcat说“您已选择空值”,感谢您的回复。我已经尝试过使用这段代码(在我对原始问题的编辑中),并且假设我已经理解了您的意思,没有任何日志记录。@smose
arrayAdapter.getItem(position)是选定的值。你可以随意使用。这两个选项是可选的。不要在侦听器中使用
getEditText().getText
。我已尝试将arrayAdapter.getItem(position)强制转换为字符串并记录该字符串,但在我的日志cat中没有得到任何结果,我不确定原因。@smose您正在使用
setOnItemSelectedListener
。在回答中,我使用的是
setonicmclicklistener
。他们不一样。啊,我没发现!非常感谢,它现在可以工作了!