當我運行我的應用程式并添加或顯示 RecycleView 串列時,我正在使用 Android Studio,文本視圖僅顯示標題而不是 firebase 內的資料這是 textview addCateogryclass 會導致這種情況的原因是什么?在 firebase child 上使用了相同的資料。
firebase 實時資料庫 Firebase
模型類別類
public class ModelCategoryClass {
//same variable in db
String id, category, uid;
long timestamp;
public ModelCategoryClass() {}
public ModelCategoryClass(String id, String category, String uid, long timestamp) {
this.id = id;
this.category = category;
this.uid = uid;
this.timestamp = timestamp;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
配接器類別類
public class AdapterCategoryClass extends RecyclerView.Adapter<AdapterCategoryClass.HolderCategory> {
private Context context;
private ArrayList<ModelCategoryClass> categoryClassArrayList;
//xml rows_categorys
private RowsCategorysBinding binding;
//constucor
public AdapterCategoryClass(Context context, ArrayList<ModelCategoryClass> categoryClassArrayList) {
this.context = context;
this.categoryClassArrayList = categoryClassArrayList;
}
///////////////
//generated from RecyclerView.Adapter<AdapterCategoryClass.HolderCategory>
@NonNull
@Override
public HolderCategory onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//binding
binding = RowsCategorysBinding.inflate(LayoutInflater.from(context), parent, false);
return new HolderCategory(binding.getRoot());
//return new HolderCategory(RowsCategorysBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false));
}
//getting data
@Override
public void onBindViewHolder(@NonNull HolderCategory holder, int position) {
ModelCategoryClass model = categoryClassArrayList.get(position);
String id = model.getId();
String category = model.getId();
String uid = model.getId();
long timestamp = model.getTimestamp();
//remove btn
//as we declred remove btn in HolderCatogory method
holder.removeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context,"" category,Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return categoryClassArrayList.size();
}
/////////////
//hold lists xml
public class HolderCategory extends RecyclerView.ViewHolder {
TextView textViewListCatt;
ImageButton removeBtn;
//constu
public HolderCategory(@NonNull View itemView) {
super(itemView);
textViewListCatt = binding.textViewListCat;
removeBtn = binding.removeBtn;
}
}
}
CategoryAddActivity 類
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityCategoryAddBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//init firebase auth
firebaseAuth = FirebaseAuth.getInstance();
ShowCategories();
private void ShowCategories() {
categoryClassArrayList = new ArrayList<>();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Categories");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
//clear array befor add data
categoryClassArrayList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
//get data from child in database
ModelCategoryClass mod = dataSnapshot.getValue(ModelCategoryClass.class);
//add data to array
categoryClassArrayList.add(mod);
}
//start using adapter
adapterCategoryClass = new AdapterCategoryClass(CategoryAddActivity.this, categoryClassArrayList);
//get recycleListview rom xml and set it with defualt set method
binding.recycleList.setAdapter(adapterCategoryClass);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
uj5u.com熱心網友回復:
以下代碼行:
ModelCategoryClass model = categoryClassArrayList.get(position);
String id = model.getId();
String category = model.getId();
String uid = model.getId();
long timestamp = model.getTimestamp();
應改為:
ModelCategoryClass model = categoryClassArrayList.get(position);
String id = model.getId();
String category = model.getCategory(); //??
String uid = model.getUid(); //??
long timestamp = model.getTimestamp();
這意味著您需要呼叫相應的getter。但這不是問題的全部。您沒有顯示某些內容,因為您沒有將這些值設定為相應的視圖。為了解決這個問題,您必須在 HolderCategory 類中創建一個將資料實際系結到視圖的方法。例如,要設定類別,您應該使用如下內容:
void setCategory(String category) {
binding.textViewListCat.setText(category);
}
然后從你的 onBindViewHolder 方法內部呼叫這個方法,如下所示:
holder.setCategory(category);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489329.html
標籤:爪哇 安卓 火力基地 谷歌云平台 firebase-实时数据库
上一篇:未捕獲的FirebaseError:查詢無效。您不能在呼叫orderBy()之前呼叫startAt()或startAfter()
下一篇:useEffect中未定義的變數
