[英]How to move the data that I have called from the Firebase real-time database, in a listview to another activity in android studio?
所以,我有一個簡單的列表視圖應用程序。 當我單擊一個項目時,它將使用 Bundle 將數據發送到下一個活動。 第一次用這個JSON結構
"teacher": [
{
"name": "Carl",
"age": "40"
},
{
"name": "Johnson",
"age": "44"
}
],
這是我的 Java 代碼:
Query query = FirebaseDatabase.getInstance().getReference("teacher");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
TeacherHelperClass teacherHelperClass = new TeacherHelperClass();
String name = data.child("name").getValue(String.class);
String age = data.child("age").getValue(String.class);
teacherHelperClass.setName(name);
teacherHelperClass.setAge(age);
arrayList.add(teacherHelperClass);
}
teacherAdapter.notifyDataSetChanged();
listView.setAdapter(teacherAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
Query _query = FirebaseDatabase.getInstance().getReference("teacher");
_query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String _name = dataSnapshot.child(String.valueOf(position)).child("name").getValue(String.class);
String _age = dataSnapshot.child(String.valueOf(position)).child("age").getValue(String.class);
Bundle bundle = new Bundle();
bundle.putString("dataName", _name);
bundle.putString("dataAge", _age);
TeacherDetailBottomSheet bottomSheetDialog = new TeacherDetailBottomSheet();
bottomSheetDialog.setArguments(bundle);
bottomSheetDialog.show(getSupportFragmentManager(), "exampleBottomSheet");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
代碼工作正常。 但現在我想將數據庫更改為鍵控 JSON:
"teacher": {
"001": {
"name": "Carl",
"age": "40"
},
"002": {
"name": "Johnson",
"age": "44"
}
}
也許再加一個孩子
"teacher": {
"001": {
"name": "Carl",
"age": "40",
"email": "....",
"phone-number": "...."
},
"002": {
"name": "Johnson",
"age": "44",
"email": "....",
"phone-number": "...."
}
}
我應該在 Java 代碼中更改什么? 特別是在 setOnItemClick 方法中。 我想在列表視圖中顯示孩子的姓名和年齡,並將所有數據(姓名、年齡、email、電話)發送到下一個活動。 我搜索了類似的問題,但沒有找到明確的解決方案。
代碼應該是這樣的:
老師 Model class 應該如下:
Public class TeacherModel{
String key,name ,age;
// CREATE empty constructor ,GETTER and SETTER FOR THESE VARIABLES
}
現在,創建一個 TeacherModel class 列表
List<TeacherModel> teachersList = new ArrayList<>();
FirebaseDatabase.getInstance().getReference("teacher").
addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
{
for (DataSnapshot data : dataSnapshot.getChildren()) {
TeacherModel teacher =
dataSnapshot.getValue(TeacherModel.class);
teacher.setKey(dataSnapshot.getKey());
teachersList.add(teacher);
}
teacherAdapter.notifyDataSetChanged();
listView.setAdapter(teacherAdapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
並且要將數據從一個活動發送到另一個活動,您可以使用共享 ViewModel 或可以創建公共 class 和該數據類型的變量並將值設置為該變量並在另一個活動中訪問它;
Public class Common{
Public static List<TeacherModel> teacherList;
}
在 onClickListener 中,您可以將值設置為teacherList,例如Common.teacherList = teacherList;
現在在另一個活動中,您可以使用 Common.teacherList 獲取該列表;
隨意詢問是否有不清楚的地方。 如果對您有幫助,請將此標記為正確答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.