所选项目上的 Android 微调器不起作用?
Posted
技术标签:
【中文标题】所选项目上的 Android 微调器不起作用?【英文标题】:Android Spinner on Item Selected Is Not Working? 【发布时间】: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)
);
【问题讨论】:
【参考方案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 项目选择器正在工作 我认为问题出在选择上,很高兴看到您找到了解决方案。以上是关于所选项目上的 Android 微调器不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
Spin ner OnItemSelected在Android Studio中不起作用[关闭]