如何使用POJO类将值从RecyclerView传递给AnotherActivity?

时间:2016-09-03 14:16:25

标签: android android-recyclerview pojo

我有一个POJO课程。它包含一些字符串,我想将RecyclerView的值传递给Activity。我试了一下然后失败了。我该怎么做?

  

模型

public class DetailModel {
    String title;

    public DetailModel() {
    }

    public DetailModel(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
  

适配器,onClick

holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                detailModel=new DetailModel();
                detailModels= new ArrayList<>();

                detailModel.setTitle(holder.headerText.getText().toString());

                Intent detailIntent = new Intent(context.getApplicationContext(), DetailActivity.class);

                context.startActivity(detailIntent);
            }
        });
  

另一项活动

DetailModel detailModel=new DetailModel();

        detailBody.setText(detailModel.getTitle());

2 个答案:

答案 0 :(得分:2)

回收者视图本身不包含任何数据。这是适配器的工作。 recyclerview'的工作是显示该数据并拦截触摸事件。因此,在您的点击监听器上获取数据(POJO对象)并将其传递给您的活动。

答案 1 :(得分:2)

有几种方法可以做到,但我会向您展示最简单的方法:

onBindViewHolder

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position) {
    final MyView myHolder = (MyView) holder;
    myHolder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            detailModel.setTitle(holder.headerText.getText().toString());

            Intent detailIntent = new Intent(context, DetailActivity.class);
            //To pass your class:
            intent.putExtra("mypojo", details.get(position));
            context.startActivity(detailIntent);

        }
    });

}

通过这种方式,您必须在Serializable课程中实施POJO

public class DetailModel implements Serializable{
String title;

public DetailModel() {
}

public DetailModel(String title) {
    this.title = title;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}
}

在第二个Activity中使用此代码获取类:

getIntent().getExtras().getSerializable("mypojo");
//also you can cast extra 
DetailModel detailmodel=(Detailmodel) getIntent().getExtras().getSerializable("mypojo");
//if you implemented Parcelable
DetailModel detailmodel=(Detailmodel) getIntent().getExtras().getParcelable("mypojo");

这是第一种方式,另一种更快的方式是使用Parcelable,请查看此答案,但您必须在Parcelable中付出一些努力:how-to-send-an-object-from-one-android-activity-to-another-using-intent

我建议您使用Parcelable也许您需要一些时间来学习它,但是您可以在较大的课程中感受速度差异。

此外,如果您的POJO中有少量字符串,请尝试使用intent extras而不是像这样发送类:

intent.putExtra("model_name",pojo.getName());
//then get
getIntent().getExtras().getString("model_name");