【发布时间】:2018-03-14 05:13:04
【问题描述】:
我正在从 Firebase 的 Firestore 数据库加载列表以填充微调器。这样可行。我想在微调器中的 ItemSelected 上填充 RecyclerView。
我有这个代码来填充 RecyclerView:
private void populateRecycler(final String RootCollection, final String UserID) {
final String UserID = getIntent().getExtras().getString(UserIDKey);
mQuery = mFirestore
.collection(RootCollection)
.whereEqualTo("UID", UserID)
.orderBy("DateAdded", Query.Direction.DESCENDING);
mAdapter = new OrdersAdapter(mQuery, HomeActivity.this);
mOrdersRecycler.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
mOrdersRecycler.setAdapter(mAdapter);
}
如果在 onCreate 中放置或调用此代码,则它可以正常工作。但我想稍后修改代码,以便稍后在微调器中基于 String 填充。 (可能只是添加另一个 .whereEqualto)
当我从这里调用 populateRecycler() 时,它不起作用(我正在使用 ButterKnife,仅供参考):
@OnItemSelected(R.id.storespinner)
public void spinnerItemSelected(Spinner spinner, int position) {
String spinnerValue = mStoreSpinner.getItemAtPosition(position).toString();
Toast.makeText(getBaseContext(), "Selected item " + spinnerValue, Toast.LENGTH_SHORT).show();
populateRecycler("test", UserID);
}
或者,如果我从另一个 onSuccess 侦听器(Firebase Firestore DB 调用)调用 populateRecycler,它也不起作用:
public void onSuccess(DocumentSnapshot documentSnapshot) {
UIDOrg uidOrg = documentSnapshot.toObject(UIDOrg.class);
mOrgTextView.setText(uidOrg.getOrg());
RootCollection = uidOrg.getRootCollection();
populateRecycler("test", UserID);
有人可以指点我正确的方向吗?
为什么populateRecycler 仅在从 onCreate 调用时才有效?
编辑: 这就是我填充微调器数组的方式。
public void onSuccess(DocumentSnapshot documentSnapshot) {
UIDOrg uidOrg = documentSnapshot.toObject(UIDOrg.class);
mOrgTextView.setText(uidOrg.getOrg());
RootCollection = uidOrg.getRootCollection();
//Populate Spinner here
readData(new FirestoreCallBack() {
@Override
public void onCallback(List<String> list) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mStoreSpinner.setAdapter(adapter);
}
});
//End of Spinner
}
在 readData() 中是:
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
spinnerArray.add(String.valueOf(document.getId()));
}
firestoreCallBack.onCallback(spinnerArray);
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
【问题讨论】:
-
“它不起作用”是什么意思?
-
对不起,我没有澄清。屏幕上什么也没有出现。但没有任何错误。
-
您是否尝试在更改回收站视图的数据后添加
adapter.notifyDataSetChanged()? -
是的,我刚刚在
populateRecycler上做了,添加了mAdapter.notifyDataSetChanged();,但还是一样。 -
这行代码返回了什么?
Toast.makeText(getBaseContext(), "Selected item " + spinnerValue, Toast.LENGTH_SHORT).show();
标签: android firebase google-cloud-firestore android-recyclerview