所选项目上的 Android Spinner 不起作用?

问题描述

所以伙计们,我正在尝试对我的微调器实施 OnItemSelectedListener。 数据从 firebase 中检索并添加到 arraylist 和我添加到适配器的数组列表

//spinner stufff
//variables:

    Spinner schoolNamesspinner;
    DatabaseReference databaseReference;
    ArrayList<String> instituteNames;
    ArrayAdapter<String> adapter;


        adapter = new ArrayAdapter<>(studentsLogIn.this,android.R.layout.simple_spinner_dropdown_item,instituteNames);

        schoolNamesspinner.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        **// populating selector;**

        populatingSelecto();

填充微调器 enter image description here

**// populating selector**

private void populatingSelecto() {

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {

                for (DataSnapshot ids : snapshot.getChildren()) {
                    uniqIds.add(ids.getKey());

                }

                for (int i = 0; i < uniqIds.size(); i++) {
                    databaseReference.child(uniqIds.get(i)).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                            if (snapshot.exists()) {
                                String name = snapshot.child("INSTITUTE").child("institutionName").
                                        getValue().toString();

                                instituteNames.add(name);


                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError error) {

                        }
                    });
                }

            } else {
                dialogBoxMeathod(studentsLogIn.this,"No Institutes on the Record");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });


}

因此,在选定的项目上,我试图显示选定项目的文本,但它不起作用

    schoolNamesspinner.setonItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent,View view,int position,long id) {
            Toast.makeText(studentsLogIn.this,instituteNames.get(position),Toast.LENGTH_SHORT).show();
        }

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

        }
    });

解决方法

我必须在添加内容后立即通知适配器

 for (int i = 0; i < uniqIds.size(); i++) {
            databaseReference.child(uniqIds.get(i)).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if (snapshot.exists()) {
                        String name = snapshot.child("INSTITUTE").child("institutionName").getValue().toString();
                        instituteNames.add(name);
                        // here i have to add the adapter.notifydatachanged
                    }
                }
            }
        }
,

您尚未初始化微调器:

    Spinner schoolNamesSpinner;
    DatabaseReference databaseReference;
    ArrayList<String> instituteNames;
    ArrayAdapter<String> adapter;
   schoolNamesSpinner=findViewById(R.id.your_spinner_id);//this line
   adapter = new ArrayAdapter<>(studentsLogIn.this,android.R.layout.simple_spinner_dropdown_item,instituteNames);

      schoolNamesSpinner.setAdapter(adapter);
      adapter.notifyDataSetChanged();

**// populating selector;**

     populatingSelecto();


   schoolNamesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent,View view,int position,long id) {
        Toast.makeText(studentsLogIn.this,instituteNames.getItemAtPosition(position),Toast.LENGTH_SHORT).show();//use getItemAtPosition
    }

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

    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...