问题描述
我正在尝试将在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的帮助下获取数据。