如何在点击回收站视图项目时显示firebase数据库的数据

时间:2017-07-01 13:56:41

标签: android firebase firebase-realtime-database android-recyclerview

我是新手,想开发一个在主屏幕上显示回收者视图列表的应用程序,名称和城市等信息。但是当我点击回收列表视图项时,它会打开一个新屏幕并显示名称,地址,城市,年龄等信息。

我开发了第一部分应用程序,它显示了带有名称和城市的Recycler listview。但是我被困在第二部分,点击回收列表视图项目打开一个新屏幕,显示姓名,地址,城市,年龄等信息。

例如,

  

Firebase数据库

  • business_list

    - knjdbasgjbascacgjc
        - name: "intex"
        - address: "south avenue"
        - city: "south home"
        - description: "small company"
        - rating: "5"
    
    - Khasjdgjacjaghjkhb
        - name: "mmx"
        - address: "north avenue"
        - city: "north home"
        - description: "big company"
        - rating: "3"
    

我在回收视图中显示的主屏幕: -

    - intex, south avenue, 5
    - mmx, north avenue, 3

我希望当我在回收器上查看项目时,它会显示带有详细信息的新屏幕: -

例如,当我点击第一个项目时,

    - intex, south avenue, south home, small company, 5

如果我点击第二项,

           - mmx, north avenue, north home, big company, 3

怎么做?

onBindViewHolder,

    @Override
    public void onBindViewHolder(final UserViewHolder holder, final int 
    position) {

    BusinessDetailModel businessDetailModel = list.get(position);

    holder.businessName.setText(businessDetailModel.businessName);
    holder.businessCity.setText(businessDetailModel.city);
    holder.businessRating.setText(businessDetailModel.ratingValue + "");

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {

            Context context = v.getContext();

            intent = new Intent(context, BusinessDetailActivity.class);

            context.startActivity(intent);
        }

    });
}

1 个答案:

答案 0 :(得分:2)

您尚未在问题中发布数据库结构,我真的不知道您是如何存储年龄,城市和地址信息的。

所以,我只会向您提供一般性答案,我假设从datasnapshot检索到的childEventListener个对象包含上述信息。

假设ChildEventListener适配器中的recyclerView创建POJO对象,如下所示: -

@Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            final YourPOJO pojo = dataSnapshot.getValue(YourPOJO.class);}

它将它添加到ArrayList<YourPOJO>对象,如下所示: -

list.add(pojo);
notifyItemInserted(list. - 1);

现在,在您的recyclerView适配器的onBindViewHolder()方法中,您可以调用以下内容来启动新活动并从您的pojo传递数据: -

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
holder.yourView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                   Intent intent = new 
                   Intent(this,SecondActivty.class);
                   intent.putExtra("age",list.get(position).getAge;
                   intent.putExtra("name",list.get(position).getName;
                   intent.putExtra("address",list.get(position)
                   .getAddress;
                   //and so on for the other values
                   startActivity(intent);
                        }
                    });
                }

在此之后,您可以在第二个活动中使用getIntent()并获取值并显示它们。

查看onBindViewHolder()代码后进行编辑:

我想谈谈intents的工作。使用intent,您可以在活动之间传递数据。请参阅我的onBindViewHolder()代码。

因此,对于您的代码,只需将其更改为以下内容: -

@Override
public void onBindViewHolder(final UserViewHolder holder, final int 
position) {

BusinessDetailModel businessDetailModel = list.get(position);

holder.businessName.setText(businessDetailModel.businessName);
holder.businessCity.setText(businessDetailModel.city);
holder.businessRating.setText(businessDetailModel.ratingValue + "");

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {

        Context context = v.getContext();

        intent = new Intent(context, BusinessDetailActivity.class);
        intent.putExtra("Name",businessDetailModel.businessName);
        intent.putExtra("City",businessDetailModel.city);
        intent.putExtra("Rating",businessDetailModel.ratingValue);
        //And so on for the rest of the data that you want to pass to 
        //the second activity

        context.startActivity(intent);
    }

});

}

在此之后,在BusinessDetailActivity中,您可以按如下方式检索传递的数据: -

String name = getIntent().getExtra("Name");
String city = getIntent().getExtra("City");
//and so on for the rest

我强烈建议您阅读on intents