【问题标题】:Android Spinner on Item Selected Is Not Working?所选项目上的 Android 微调器不起作用?
【发布时间】:2021-05-29 13:31:05
【问题描述】:

所以伙计们,我正在尝试为我的微调器实现 OnItemSelectedListener。 数据从火力库中检索并添加到数组列表中,我添加到adatper中的数组列表

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

        }
    });

【问题讨论】:

    标签: android firebase firebase-realtime-database spinner onitemselectedlistener


    【解决方案1】:

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

     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
                        }
                    }
                }
            }
    

    【讨论】:

      【解决方案2】:

      你还没有初始化你的微调器:

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

      【讨论】:

      • schoolNamesSpinner = findViewById(R.id.spinner_students_login); // 我确实初始化了它,但忘记粘贴代码
      • 检查我更新的答案 InshaAllah 这次它会起作用。
      • 检查您的 logcat 是否您的项目被点击。使用 onItemSelected 中的 Log.d 函数检查您的项目是否被选中,即问题出在 toast 或选择本身。
      • Bhai jaan 当我从 firebase 检索数据时它不起作用 正在显示数据,但 onitem 选择器不起作用,所以我注释掉了填充选择器并直接添加了一些东西来测试,比如 Institutename.add( “一种”) 。然后 on 项目选择器正在工作
      • 我认为问题出在选择上,很高兴看到您找到了解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多