首页 > 解决方案 > 如何在单个活动中检索不同的子 Firebase 数据库

问题描述

我正在尝试从 Firebase 数据库中检索数据并将它们设置为文本视图。我的数据库有不同的多个子数据。我想在一个单一的活动中检索所有孩子,比如全球。我在主要活动中有不同的卡片视图点击。当我单击任何项​​目时,它不会显示与该项目相关的相同子数据。它显示每个项目点击的单个子数据。我怎样才能让他们在卡片视图点击的信号活动中?我是 Android 新手,我在这里尝试了多个答案,但都失败了。谁能帮我这个?

[1]:https://photos.app.goo.gl/DxYjK6jG182qUY6n9

public class GlobalActivity extends AppCompatActivity

    RecyclerView mRecyclerView;
    List<User> myUserList;
    User mUser;
    ProgressDialog progressDialog;
    private DatabaseReference db;
    private ValueEventListener eventListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_global);


        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Please wait its loding..");
                mRecyclerView = (RecyclerView) findViewById(R.id.farazList);

        GridLayoutManager gridLayoutManager = new GridLayoutManager(AhmedFarazActivity.this, 1);
        mRecyclerView.setLayoutManager(gridLayoutManager);

        myUserList = new ArrayList<>();

        final ReAdapter reAdapter = new ReAdapter(GlobalActivity.this, myUserList);
        mRecyclerView.setAdapter(reAdapter);

        db = FirebaseDatabase.getInstance().getReference().child("Spinner").child("US");
        progressDialog.show();
        eventListener = db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                myUserList.clear();
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    User userData = ds.getValue(User.class);
                    myUserList.add(userData);
                }
                reAdapter.notifyDataSetChanged();
                progressDialog.dismiss();
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                progressDialog.dismiss();
            }
        });
    }
}

手柄点击

这是适配器中的处理程序,当我单击任何项​​目时,它不会显示与该项目相关的相同子数据。它显示每个项目点击的单个子数据。

    @Override
    public void onBindViewHolder(@NonNull MyHolder holder, int position) {

        // Hide data
        holder.nameText.setText(models.get(position).getName());
        holder.img.setImageResource(models.get(position).getImg());

        holder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onItemClick(View view, int pos) {
                //Go to UK Item to show UK data
                if (models.get(pos).getName().equals("US")){
                    //Start Display Activity on click
                    Toast.makeText(c, "US", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(c, GlobalActivity.class);
                    c.startActivity(intent);
                }
                //Go to UK Item to show UK data
                if (models.get(pos).getName().equals("UK")){
                    //Start System Info Activity on click
                    Toast.makeText(c, "UK", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(c, GlobalActivity.class);
                    c.startActivity(intent);

                }

            }
        });
    }

标签: firebase-realtime-databasegoogle-cloud-firestorefirebase-authentication

解决方案


在 GlobalActivity 中,我创建了一个数据 初始化数据()的方法;在 onCreate 里面

public class GlobalActivity extends AppCompatActivity

RecyclerView mRecyclerView;
List<User> myUserList;
User mUser;
ProgressDialog progressDialog;
private DatabaseReference db;
private ValueEventListener eventListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_global);


    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Please wait its loding..");
            mRecyclerView = (RecyclerView) findViewById(R.id.farazList);

    GridLayoutManager gridLayoutManager = new GridLayoutManager(AhmedFarazActivity.this, 1);
    mRecyclerView.setLayoutManager(gridLayoutManager);

    myUserList = new ArrayList<>();

    final ReAdapter reAdapter = new ReAdapter(GlobalActivity.this, myUserList);
    mRecyclerView.setAdapter(reAdapter);

    data();
    progressDialog.show();
    eventListener = db.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            myUserList.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                User userData = ds.getValue(User.class);
                myUserList.add(userData);
            }
            reAdapter.notifyDataSetChanged();
            progressDialog.dismiss();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            progressDialog.dismiss();
        }
    });
}

获取方法

public void data() {
    String data = getIntent().getStringExtra("data");
    if (data.equals("1")) {
        db = FirebaseDatabase.getInstance().getReference().child("Spinner").child("India");
        db.keepSynced(true);
    } else if (data.equals("2")) {
        db = FirebaseDatabase.getInstance().getReference().child("Spinner").child("Pak");
        db.keepSynced(true);
    } else if (data.equals("3")) {
        db = FirebaseDatabase.getInstance().getReference().child("Spinner").child("UK");
        db.keepSynced(true);
    }
}

推荐阅读