Android 微调器不显示选定的文本
Android Spinner not showing selected text
我正在将数据从 firestore 数据库提取到 ArrayList 中,然后将这些对象加载到微调器中。当我打开微调器以使 selection 所有对象正确显示时,但是当您 select 来自微调器的对象时,微调器保持空白并且不显示任何文本。我已经尝试添加 adapter.notifyDataSetChanged();
并且我还尝试更改文本的颜色,正如我在其他地方看到的那样,但两种解决方案均无效。
这是我的 java 文件:
public class AdminEditor extends AppCompatActivity {
FirebaseFirestore db;
CollectionReference usersRef;
ArrayList<UserItem> users;
Spinner spinnerUser;
Button btnGetData;
TextView txtTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_editor);
//Set up FireStore and references
db = FirebaseFirestore.getInstance();
usersRef = db.collection("users");
//Set up resources
txtTest = findViewById(R.id.txtTest);
spinnerUser = findViewById(R.id.spinnerUser);
btnGetData = findViewById(R.id.btnGetData);
users = new ArrayList<UserItem>();
loadUsers();
updateSpinner();
}
public void loadUsers() {
usersRef.get()//Get entire users collection
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
users.add((UserItem)documentSnapshot.toObject(UserItem.class));//Add each user from the collection to the arraylist
}
}
});
}
//To fill spinners with data
public void updateSpinner() {
ArrayAdapter<UserItem> adapter = new ArrayAdapter<UserItem>(this, android.R.layout.simple_spinner_item, users);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerUser.setAdapter(adapter);
spinnerUser.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
UserItem user = (UserItem) parent.getSelectedItem();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
这是 xml 文件:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AdminEditor">
<Spinner
android:id="@+id/spinnerUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="128dp"
android:spinnerMode="dropdown"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnGetData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:text="Get Data"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/spinnerUser" />
<TextView
android:id="@+id/txtTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnGetData" />
</androidx.constraintlayout.widget.ConstraintLayout>```
Thanks for your help
每当用户完全从 Firebase 收到时更新您的微调器,因此将对 updateSpinner()
的调用转移到 usersRef.get().addOnSuccessListener
并将其从 onCreate()
方法
中删除
public void loadUsers() {
usersRef.get()//Get entire users collection
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
users.add((UserItem)documentSnapshot.toObject(UserItem.class));//Add each user from the collection to the arraylist
}
updateSpinner();
}
});
我正在将数据从 firestore 数据库提取到 ArrayList 中,然后将这些对象加载到微调器中。当我打开微调器以使 selection 所有对象正确显示时,但是当您 select 来自微调器的对象时,微调器保持空白并且不显示任何文本。我已经尝试添加 adapter.notifyDataSetChanged();
并且我还尝试更改文本的颜色,正如我在其他地方看到的那样,但两种解决方案均无效。
这是我的 java 文件:
public class AdminEditor extends AppCompatActivity {
FirebaseFirestore db;
CollectionReference usersRef;
ArrayList<UserItem> users;
Spinner spinnerUser;
Button btnGetData;
TextView txtTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_editor);
//Set up FireStore and references
db = FirebaseFirestore.getInstance();
usersRef = db.collection("users");
//Set up resources
txtTest = findViewById(R.id.txtTest);
spinnerUser = findViewById(R.id.spinnerUser);
btnGetData = findViewById(R.id.btnGetData);
users = new ArrayList<UserItem>();
loadUsers();
updateSpinner();
}
public void loadUsers() {
usersRef.get()//Get entire users collection
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
users.add((UserItem)documentSnapshot.toObject(UserItem.class));//Add each user from the collection to the arraylist
}
}
});
}
//To fill spinners with data
public void updateSpinner() {
ArrayAdapter<UserItem> adapter = new ArrayAdapter<UserItem>(this, android.R.layout.simple_spinner_item, users);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerUser.setAdapter(adapter);
spinnerUser.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
UserItem user = (UserItem) parent.getSelectedItem();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
这是 xml 文件:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AdminEditor">
<Spinner
android:id="@+id/spinnerUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="128dp"
android:spinnerMode="dropdown"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnGetData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:text="Get Data"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/spinnerUser" />
<TextView
android:id="@+id/txtTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnGetData" />
</androidx.constraintlayout.widget.ConstraintLayout>```
Thanks for your help
每当用户完全从 Firebase 收到时更新您的微调器,因此将对 updateSpinner()
的调用转移到 usersRef.get().addOnSuccessListener
并将其从 onCreate()
方法
public void loadUsers() {
usersRef.get()//Get entire users collection
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
users.add((UserItem)documentSnapshot.toObject(UserItem.class));//Add each user from the collection to the arraylist
}
updateSpinner();
}
});