微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将ArrayList从RecyclerView传递到另一个Activity

如何解决将ArrayList从RecyclerView传递到另一个Activity

我正在尝试将在mainactivity.java中设置的数据传递到另一个活动(infoPage.java)中,但我似乎无法使其正常工作。

MainActivity.java

data = new ArrayList<>();
       data.add( new CarData("Toyota Camry 2010 2.4V","Automatic","5 Seater","Petrol/Full","RM 40 /h",R.drawable.camry2010));


       recyclerView= findViewById(R.id.browsedRecycler);
       recyclerView.setLayoutManager(new linearlayoutmanager(this));
       adapter = new Adapter(this,data);
       recyclerView.setAdapter(adapter);

模型类的构造函数

public CarData(String title,String trans,String seats,String fuel,String price,int imgID) {

        this.title = title;
        this.trans = trans;
        this.seats = seats;
        this.fuel = fuel;
        this.price = price;
        this.imgID = imgID;
    }

适配器类

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {


    private LayoutInflater layoutInflater;
    private List<CarData> data;

    public Adapter(Context context,List<CarData>data) {
        this.layoutInflater = LayoutInflater.from(context);
        this.data = data;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,int viewType) {
        View view = layoutInflater.inflate(R.layout.itemlist,viewGroup,false);
        return new ViewHolder(view);
    }

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

        //to bind the textview with data received

       String title = data.get(position).getTitle();
       String trans = data.get(position).getTrans();
       String seat = data.get(position).getSeats();
       String fuel = data.get(position).getFuel();
       String price = data.get(position).getPrice();
       int imgid = data.get(position).getImgID();
        holder.texttitle.setText(title);
        holder.trans.setText(trans);
        holder.seats.setText(seat);
        holder.fuel.setText(fuel);
        holder.price.setText(price);
        holder.imageView.setimageResource(imgid);

    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView texttitle,trans,seats,fuel,price;
        ImageView imageView;
       public ViewHolder(@NonNull View itemView) {
           super(itemView);

           itemView.setonClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View view) {

                   Intent i = new Intent(view.getContext(),infoPage.class);
                   i.putExtra("title",(data.get(getAbsoluteAdapterPosition())));
                   view.getContext().startActivity(i);
               }
           });

           texttitle = itemView.findViewById(R.id.textTitle);
           trans = itemView.findViewById(R.id.carTrans);
           seats = itemView.findViewById(R.id.seats);
           fuel = itemView.findViewById(R.id.fuel);
           price = itemView.findViewById(R.id.price);
           imageView=itemView.findViewById(R.id.itemImage);
       }
   }

我的infopage.java基本上还没有什么,只是textviews和imageviews的声明 infoPage.java

 TextView textView;
    ImageView carimage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cars_info_page);

        textView=findViewById(R.id.detailText);
        carimage=findViewById(R.id.carsimg);

我想通了,谢谢您的帮助!

解决方法

为了将ArrayList传递给另一个活动,您应该使模型类为Parcelable,为此,您可以使用Parcelable插件,该插件向模型类添加了一些必需的代码并使之成为Parcelable。您可以为此工作使用不同的插件,但是我用于项目的插件是Michal Charmas撰写的“ Android ParceLable Code Generator”。 您可以从以下路径下载此插件: 文件->设置->插件 之后,您应该使用putParcelableArrayListExtra()方法将arraylist传递给目标活动。 您可以使用getIntent()。getParcelableArrayExtra()方法在目标Activity中获取Arraylist,该方法需要一个参数,并且该参数是您在第一个Activity中指定的String键。

,

我刚刚意识到您正在以错误的方式发送数据。正确的方法是使用getter和setter。 如果您不了解它们,那么可以看一下- https://www.c-sharpcorner.com/article/recyclerview-in-andriod-with-java/

因此,您需要在创建构造函数的类中进行更改(比方说数据类),并在其中使用getter和setter。

在Mainactivity中初始化Data类,并在setter的帮助下设置数据,然后在Adapter中初始化Data类,并在getter的帮助下获取数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。