无法从 Spinner 中选择项目

Posted

技术标签:

【中文标题】无法从 Spinner 中选择项目【英文标题】:Unable to select item from Spinner 【发布时间】:2017-10-20 19:15:42 【问题描述】:

我正在尝试使用列表填充我的微调器,它可以工作,但是当我尝试选择一个项目时,我无法这样做。 我从 firebase 数据库创建了一个列表,我需要在微调器中使用它。

这是我获取列表的代码:

 List<String> Uniname = new ArrayList<>();
    childrefUNI.addValueEventListener(new ValueEventListener() 
                                              @Override
                                          public void onDataChange(DataSnapshot dataSnapshot) 
                                              pl.setVisibility(View.VISIBLE);

                                              for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) 
                                                  String uniName = postSnapshot.getValue(String.class);
                                                  Uniname.add(uniName);
                                              

                                          

                                          @Override
                                          public void onCancelled(DatabaseError databaseError) 

                                          
                                      );

这是我填充微调器的代码

ArrayAdapter < String > UniversityNameArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.spinner_item,Uniname);
    UniversityNameSpinner.setAdapter(UniversityNameArrayAdapter);
    UniversityNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
            UniversityName = UniversityNameSpinner.getSelectedItem().toString();
            Toast.makeText(getApplicationContext(),UniversityName,Toast.LENGTH_SHORT).show();
            if(!UniversityName.equals("Please Select University"))
               CourseNameSpinner.setVisibility(View.VISIBLE);
                if (UniversityName.equals("MDU"))
                    CourseNameArray = getResources().getStringArray(R.array.MDUCourses);
                    CourseName = CourseNameGen(CourseNameArray);
                
            
        

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

        
    );

微调器已填充,但 onItemSelected 不起作用。 我该怎么办?谢谢。

【问题讨论】:

在使用自定义布局时尝试将ArrayAdapter 与此构造函数ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) 一起使用,请参阅here 中的更多信息 @RahmatWaisi textViewResourceId 是什么?我对 android 还很陌生 【参考方案1】:

当您为微调器项目使用自定义布局时,例如spinner_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal" 
    android:layout_
    android:layout_
    android:clickable="true"
    android:id="@+id/lnrRoot"
    android:background="#263238">

    <TextView
        android:layout_
        android:layout_
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="some text"
        android:id="@+id/txtSomeId"
        android:gravity="center_vertical"/>


</LinearLayout>

你应该使用ArrayAdapter的这个构造函数

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

它将textViewResourceId 作为参数来确定将文本放置在自定义微调器项目中的哪个位置,而textViewResourceId 将是R.id.txtSomeId

【讨论】:

以上是关于无法从 Spinner 中选择项目的主要内容,如果未能解决你的问题,请参考以下文章

Spinner:getItemAtPosition(position) 总是返回 null/empty

Java onItemSelectedListener 和 Spinner 不返回任何内容

在 Robotium 中选择 Spinner 错误项

在 ConstraintLayout 中选择 Spinner 项目时,滚动视图跳到顶部

选择项目后更改 Spinner 列表内容 Android

无法刷新 Spinner 所选项目的 ListView 以从 url 获取新数据