[英]"setOnItemSelectedListener()" not called when selecting item in spinner
I'm creating an android app which is used for hotel management.我正在创建一个用于酒店管理的 android 应用程序。
I want to show the user, the number of rooms available in the form of spinner.我想以微调器的形式向用户显示可用房间的数量。
I'm storing the details(roomNumber, name address etc..) in google firebase.我在谷歌 firebase 中存储详细信息(房间号、姓名地址等)。
If the user is logging in the app for first time then all the room numbers in spinner should be visible.如果用户是第一次登录应用程序,那么微调器中的所有房间号都应该是可见的。 But if the user has already booked a room then that room number should not be visible in spinner.但是,如果用户已经预订了房间,那么该房间号不应在微调器中可见。
Here is the java code:这是 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");
}
}
}
});
If the room is already booked then roomNumberDocument
will not be null else it will be null.如果房间已经被预订,那么roomNumberDocument
将不是 null,否则它将是 null。
If the room is already booked then I will not add it into the ArrayList roomNumbersList
.如果房间已经预订,那么我不会将其添加到 ArrayList roomNumbersList
。
Here I'm setting up the adapter:我在这里设置适配器:
adapterRoomNumbers= new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, roomNumbersList);
adapterRoomNumbers.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerRoomNumber.setAdapter(adapterRoomNumbers);
Here is the click listener for the spinner:这是微调器的点击侦听器:
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) {
}
});
The problem is that setOnItemSelectedListener()
is not called if I select any item in the spinner.问题是,如果我 select 微调器中的任何项目,则不会调用setOnItemSelectedListener()
。
Because of that strRoomNumber
is getting null. I will use strRoomNumber
for storing it in the firebase database.因为strRoomNumber
得到 null。我将使用strRoomNumber
将它存储在 firebase 数据库中。
What might be the problem?可能是什么问题?
Try move the codes for setting up the adapter to just before documentReference.get().addOnSuccessListener.......
and inside onSuccess method, add this as the last line: adapterRoomNumbers.notifyDataSetChanged();
尝试将设置适配器的代码移动到documentReference.get().addOnSuccessListener.......
并在onSuccess方法内,将其添加为最后一行: adapterRoomNumbers.notifyDataSetChanged();
Explanation: Adapter is not updated correctly as calls to firebase is an async process.解释:适配器未正确更新,因为对 firebase 的调用是一个异步过程。
your setOnItemSelectedListner
must look like this:您的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) {
}
});
also check this out for more info setOnItemSelectedListener of Spinner does not call另请查看此以获取更多信息Spinner 的 setOnItemSelectedListener 不会调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.