Android:传递在 recyclerview 上显示的数据并填充另一个活动
Android: pass data shown on recyclerview and populate another acitivty
我想将 recyclerview 从 firebase 实时数据库接收到的数据传递给另一个 activity。
因此,当用户单击任何项目时,它会打开另一个 activity 并收到完整数据(图像、名称、位置、描述)。
注意:我尝试使用 firebaseRecyclerAdapter 的 setonclick 侦听器
但是 android studio 没有显示 OnClickListener,所以我应该在哪里使用 onclick?
我的主要活动:
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<HomeWorkView> options = new FirebaseRecyclerOptions.Builder<HomeWorkView>()
.setQuery(reference, HomeWorkView.class)
.build();
FirebaseRecyclerAdapter<HomeWorkView, HomeScreenWorkViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<HomeWorkView, HomeScreenWorkViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull HomeScreenWorkViewHolder viewHolder, int i, @NonNull HomeWorkView homeWorkView) {
viewHolder.setdetails(getApplicationContext(), homeWorkView.getName(), homeWorkView.getImage(), homeWorkView.getDescription(), homeWorkView.getLocation());
}
@NonNull
@Override
public HomeScreenWorkViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.work_item_display_layout, parent,false);
HomeScreenWorkViewHolder holder = new HomeScreenWorkViewHolder(view);
return holder;
}
};
firebaseRecyclerAdapter.startListening();
mrecyclerView.setAdapter(firebaseRecyclerAdapter);
}
ViewHolder:
public class HomeScreenWorkViewHolder extends RecyclerView.ViewHolder {
View view;
public HomeScreenWorkViewHolder(@NonNull View itemView) {
super(itemView);
view = itemView;
}
public void setdetails(Context context, String name, String image, String description, String location) {
TextView mtitletv = view.findViewById(R.id.product_layout_name);
TextView mdesrcriptiontv = view.findViewById(R.id.product_layout_description);
TextView mlocationtv = view.findViewById(R.id.product_layout_location);
ImageView mImagetv = view.findViewById(R.id.product_layout_image);
mtitletv.setText(name);
mdesrcriptiontv.setText(description);
mlocationtv.setText(location);
Picasso.get().load(image).into(mImagetv);
}
}
Class:
public class HomeWorkView {
String Name, Image, Description, Location;
public HomeWorkView() {
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getImage() {
return Image;
}
public void setImage(String image) {
Image = image;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getLocation() {
return Location;
}
public void setLocation(String location) {
Location = location;
}
}
为 firebaseAdapter 创建 onItemClickListener:
创建 itemclicked 回调:
public interface OnItemClick{
void onItemClicked(int position);
}
更改您的 viewHolder:
public class HomeScreenWorkViewHolder extends RecyclerView.ViewHolder{
public HomeScreenWorkViewHolder(@NonNull View itemView,OnItemClick callBack) {
super(itemView);
view = itemView;
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callBack.onItemClicked(getAdapterPosition());
}
});
}
}
开始时更改:
@Override
protected void onStart() {
super.onStart();
OnItemClick onItemClick = new OnItemClick{
@Overide
void onItemClicked( int position ){
HomeWorkView item = firebaseRecyclerAdapter.getItem(position);
String name = item.name;
String description = item.description
Intent intent =new Intent(this@HomeActivity,
AnotherActivity::class);
intent.putExtra("name",name);
intent.putExtra("description",description);
startActivity(intent);
}
}
};
并更改此行:
HomeScreenWorkViewHolder holder = new HomeScreenWorkViewHolder(view);
到
HomeScreenWorkViewHolder holder = new HomeScreenWorkViewHolder(view,onItemClick);
您可以使用 Intent 在活动之间传递数据。
在您的活动中:
firebaseRecyclerAdapter.setOnItemClickListener(new OnItemClick{
@Overide
void onItemClicked( int position ){
HomeWorkView item = firebaseRecyclerAdapter.getItem(position);
String name = item.name;
String description = item.description
Intent intent =new Intent(this@HomeActivity,
AnotherActivity::class);
intent.putExtra("name",name);
intent.putExtra("description",description);
startActivity(intent);
}
})
在AnotherActivity的onCreate方法中:
String name = getIntent.getExtras().getString("name");
另一种解决方案,使您的 HomeWorkView 实现可序列化:
public class HomeWorkView implements Serializable {
}
并将其传递给 AnotherActivity:
firebaseRecyclerAdapter.setOnItemClickListener(new OnItemClick{
@Overide
void OnItemClicked( HomeWorkView item ){
Intent intent =new Intent(this@HomeActivity,
AnotherActivity::class);
intent.putExtra("homework",item);
startActivity(intent);
}
})
然后在AnotherActivity的onCreate方法中:
HomeWorkView data = getIntent().getSerializableExtra("homework");
我想将 recyclerview 从 firebase 实时数据库接收到的数据传递给另一个 activity。 因此,当用户单击任何项目时,它会打开另一个 activity 并收到完整数据(图像、名称、位置、描述)。
注意:我尝试使用 firebaseRecyclerAdapter 的 setonclick 侦听器 但是 android studio 没有显示 OnClickListener,所以我应该在哪里使用 onclick?
我的主要活动:
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<HomeWorkView> options = new FirebaseRecyclerOptions.Builder<HomeWorkView>()
.setQuery(reference, HomeWorkView.class)
.build();
FirebaseRecyclerAdapter<HomeWorkView, HomeScreenWorkViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<HomeWorkView, HomeScreenWorkViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull HomeScreenWorkViewHolder viewHolder, int i, @NonNull HomeWorkView homeWorkView) {
viewHolder.setdetails(getApplicationContext(), homeWorkView.getName(), homeWorkView.getImage(), homeWorkView.getDescription(), homeWorkView.getLocation());
}
@NonNull
@Override
public HomeScreenWorkViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.work_item_display_layout, parent,false);
HomeScreenWorkViewHolder holder = new HomeScreenWorkViewHolder(view);
return holder;
}
};
firebaseRecyclerAdapter.startListening();
mrecyclerView.setAdapter(firebaseRecyclerAdapter);
}
ViewHolder:
public class HomeScreenWorkViewHolder extends RecyclerView.ViewHolder {
View view;
public HomeScreenWorkViewHolder(@NonNull View itemView) {
super(itemView);
view = itemView;
}
public void setdetails(Context context, String name, String image, String description, String location) {
TextView mtitletv = view.findViewById(R.id.product_layout_name);
TextView mdesrcriptiontv = view.findViewById(R.id.product_layout_description);
TextView mlocationtv = view.findViewById(R.id.product_layout_location);
ImageView mImagetv = view.findViewById(R.id.product_layout_image);
mtitletv.setText(name);
mdesrcriptiontv.setText(description);
mlocationtv.setText(location);
Picasso.get().load(image).into(mImagetv);
}
}
Class:
public class HomeWorkView {
String Name, Image, Description, Location;
public HomeWorkView() {
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getImage() {
return Image;
}
public void setImage(String image) {
Image = image;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getLocation() {
return Location;
}
public void setLocation(String location) {
Location = location;
}
}
为 firebaseAdapter 创建 onItemClickListener: 创建 itemclicked 回调:
public interface OnItemClick{
void onItemClicked(int position);
}
更改您的 viewHolder:
public class HomeScreenWorkViewHolder extends RecyclerView.ViewHolder{
public HomeScreenWorkViewHolder(@NonNull View itemView,OnItemClick callBack) {
super(itemView);
view = itemView;
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callBack.onItemClicked(getAdapterPosition());
}
});
}
}
开始时更改:
@Override
protected void onStart() {
super.onStart();
OnItemClick onItemClick = new OnItemClick{
@Overide
void onItemClicked( int position ){
HomeWorkView item = firebaseRecyclerAdapter.getItem(position);
String name = item.name;
String description = item.description
Intent intent =new Intent(this@HomeActivity,
AnotherActivity::class);
intent.putExtra("name",name);
intent.putExtra("description",description);
startActivity(intent);
}
}
};
并更改此行:
HomeScreenWorkViewHolder holder = new HomeScreenWorkViewHolder(view);
到
HomeScreenWorkViewHolder holder = new HomeScreenWorkViewHolder(view,onItemClick);
您可以使用 Intent 在活动之间传递数据。 在您的活动中:
firebaseRecyclerAdapter.setOnItemClickListener(new OnItemClick{
@Overide
void onItemClicked( int position ){
HomeWorkView item = firebaseRecyclerAdapter.getItem(position);
String name = item.name;
String description = item.description
Intent intent =new Intent(this@HomeActivity,
AnotherActivity::class);
intent.putExtra("name",name);
intent.putExtra("description",description);
startActivity(intent);
}
})
在AnotherActivity的onCreate方法中:
String name = getIntent.getExtras().getString("name");
另一种解决方案,使您的 HomeWorkView 实现可序列化:
public class HomeWorkView implements Serializable {
}
并将其传递给 AnotherActivity:
firebaseRecyclerAdapter.setOnItemClickListener(new OnItemClick{
@Overide
void OnItemClicked( HomeWorkView item ){
Intent intent =new Intent(this@HomeActivity,
AnotherActivity::class);
intent.putExtra("homework",item);
startActivity(intent);
}
}) 然后在AnotherActivity的onCreate方法中:
HomeWorkView data = getIntent().getSerializableExtra("homework");