如何解决在微调器中选择项目时未调用“ setOnItemSelectedListener”
我正在创建一个用于酒店管理的android应用。
我正在将详细信息(房间号,姓名地址等)存储在Google Firebase中。
如果用户是第一次登录该应用程序,则微调器中的所有房间号都应该可见。但是,如果用户已经预订了房间,那么该房间号在微调器中将不可见。
这是Java代码:
documentReference.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if(documentSnapshot.exists()){
roomNumberDocument=documentSnapshot.getString("RoomNumber");
if(roomNumberDocument!=null){
for (int i = 100; i < 111; i++) {
if(Integer.parseInt(roomNumberDocument)==i){
continue;
}
roomNumbersList.add(Integer.toString(i));
}
}else{
//room numbers
roomNumbersList.add("100");
roomNumbersList.add("101");
roomNumbersList.add("102");
roomNumbersList.add("103");
roomNumbersList.add("104");
roomNumbersList.add("105");
roomNumbersList.add("106");
roomNumbersList.add("107");
roomNumbersList.add("108");
roomNumbersList.add("109");
roomNumbersList.add("110");
}
}
}
});
如果房间已经被预订,那么roomNumberDocument
将不为空,否则将为空。
如果房间已经被预订,那么我不会将其添加到ArrayList roomNumbersList
中。
我在这里设置适配器:
adapterRoomNumbers= new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,roomNumbersList);
adapterRoomNumbers.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerRoomNumber.setAdapter(adapterRoomNumbers);
以下是微调器的点击侦听器:
spinnerRoomNumber.setonItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView,View view,int i,long l) {
strRoomNumber= adapterView.getItemAtPosition(i).toString();
Toast.makeText(context,""+strRoomNumber,Toast.LENGTH_LONG).show();
Log.i(TAG,strRoomNumber);
}
@Override
public void onnothingSelected(AdapterView<?> adapterView) {
}
});
问题是,如果我在微调器中选择任何项目,则不会调用setonItemSelectedListener()
。
因为strRoomNumber
变为空。我将使用strRoomNumber
将其存储在Firebase数据库中。
这是我完整的code
可能是什么问题?
解决方法
您的setOnItemSelectedListner
必须看起来像这样:
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView,View view,int i,long id) {
strRoomNumber = adapterView.getItemAtPosition(i).toString;
if (item != null) {
Toast.makeText(MainActivity.this,item.toString(),Toast.LENGTH_SHORT).show();
}
Toast.makeText(MainActivity.this,""+strRoomNumber,Toast.LENGTH_LONG).show();
Log.i(TAG,strRoomNumber);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
也请查看此以获取更多信息 setOnItemSelectedListener of Spinner does not call
,尝试将用于设置适配器的代码移到documentReference.get().addOnSuccessListener .......
之前并在 onSuccess 方法内部,并将其添加为最后一行:adapterRoomNumbers.notifyDataSetChanged();
说明:适配器未正确更新,因为对firebase的调用是异步过程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。