【问题标题】:How to pass data from recycler view to another activity如何将数据从回收站视图传递到另一个活动
【发布时间】:2020-10-14 15:06:05
【问题描述】:

HomeScreen 上的回收站视图,其中包含名称和城市的值。我想将 recycler-view 点击项目的数据传递给下一个活动?

数据库结构是这样的,

- 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"
            

HomeScreen 显示如下细节:

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

在 SecondActivity 上,我想显示详细信息,例如,点击第一项:

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

这是我的 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, SecondActivity.class);

            context.startActivity(intent);
        }

    });
}

【问题讨论】:

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


    【解决方案1】:

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

    所以,我只是给你一个一般性的答案,我假设从childEventListener 检索到的datasnapshot 对象包含上述信息。

    假设您的recyclerView 适配器中的ChildEventListener 创建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

    【讨论】:

    • 请说明您使用的是ListView 还是RecyclerView。两者都有不同的实现。这将帮助我更好地帮助你。
    • 我的答案中带有onBindViewHolder 的代码应该适用于您的用例。如果您仍有问题,请发布您的 onBindViewHolder 代码。
    • 那是因为我不知道您在其中显示数据的视图。我的答案中的holder.yourView 只是我用于表示目的的通用视图。同样,我的回答中的SecondActivity.class 也仅用于表示目的。如果您只是复制并粘贴它,我的代码将不起作用。这是一个关于做什么的大纲。您显然必须根据您的数据对其进行调整。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2023-01-24
    • 2015-12-31
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    相关资源
    最近更新 更多