簡體   English   中英

如何將列表視圖中我從 Firebase 實時數據庫中調用的數據移動到 android 工作室中的另一個活動?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM