从 RecyclerView 项目到其他项目的值 Activity
Values from RecyclerView item to other Activity
我正在尝试将值从具有 X 位置的 RecyclerView 项目发送到显示这些值的其他 activity,例如,在我的 RecyclerView 中,我的 X 项目有一个图像、一个标题和一个字幕;我希望 onClick 显示在其他 activity 图像、标题和副标题中。顺便说一下我的其他物品。
我认为应该用 putExtra 来完成,但我做不到。
这是我的带 ViewHolder 的适配器:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.myViewHolder> {
private LayoutInflater inflater;
private List<Data> info = Collections.emptyList();
private Context context;
public MyAdapter (Context context, List<Data> info){
this.context=context;
inflater = LayoutInflater.from(context);
this.info = info;
}
@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.recycler_item, parent, false);
myViewHolder holder = new myViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(myViewHolder holder, int position) {
Data current = info.get(position);
holder.title.setText(current.title);;
holder.subtitle.setText(current.subtitle);
holder.image.setImageResource(current.imagenId);
}
@Override
public int getItemCount() {
return info.size();
}
class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView image;
TextView title;
TextView subtitle;
public myViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.Image1);
title = (TextView) itemView.findViewById(R.id.TextTitle);
subtitle = (TextView) itemView.findViewById(R.id.TextSubTitle);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Intent intent = new Intent(context,ItemSelection.class);
context.startActivity(intent);
}
}
}
这是显示 RecyclerView 的片段的 activity:
public class ltfg0 extends Fragment {
private RecyclerView recyclerView;
private MyAdapter adapter;
public ltfg0() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_ltfg0, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.ltfg0);
adapter = new MyAdapter(getActivity(),getInfo());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return view;
}
public static List<Data> getInfo(){
List<Data> info = new ArrayList<>();
int[] srcs = {R.mipmap.img1, R.mipmap.img2, R.mipmap.img3, R.mipmap.img4};
String[] titles = {"Title 1", "Title 2", "Title 3", "Title 4"};
String[] subtitles = {"Description 1", "Description 2", "Description 3", "Description 4"};
for (int i=0; i<srcs.length && i<titles.length && i<subtitles.length;i++){
Data current = new Data();
current.imagenId = srcs[i];
current.title = titles[i];
current.subtitle = subtitles[i];
info.add(current);
}
return info;
}
}
我的数据class:
public class Data {
public int imagenId;
public String title;
public String subtitle;
}
您可以在 ViewHolder
:
中这样做
@Override
public void onClick(View view) {
Intent intent = new Intent(context,ItemSelection.class);
Bundle bundle = new Bundle();
bundle.putSerializable("DATA",info.get(getAdapterPosition()));
intent.putExtras(bundle);
context.startActivity(intent);
}
然后通过 getIntent()
:
在您的 Activity#onCreate()
中检索您的实例
Data data = (Data)getIntent().getExtras().getSerializable("DATA");
//if you have a TextView, for example...
yourTextView.setText(data.getTitle());
当然,您的 Data
class 必须实施 Serializable
:
public class Data implements Serializale { ...
我正在尝试将值从具有 X 位置的 RecyclerView 项目发送到显示这些值的其他 activity,例如,在我的 RecyclerView 中,我的 X 项目有一个图像、一个标题和一个字幕;我希望 onClick 显示在其他 activity 图像、标题和副标题中。顺便说一下我的其他物品。 我认为应该用 putExtra 来完成,但我做不到。
这是我的带 ViewHolder 的适配器:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.myViewHolder> {
private LayoutInflater inflater;
private List<Data> info = Collections.emptyList();
private Context context;
public MyAdapter (Context context, List<Data> info){
this.context=context;
inflater = LayoutInflater.from(context);
this.info = info;
}
@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.recycler_item, parent, false);
myViewHolder holder = new myViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(myViewHolder holder, int position) {
Data current = info.get(position);
holder.title.setText(current.title);;
holder.subtitle.setText(current.subtitle);
holder.image.setImageResource(current.imagenId);
}
@Override
public int getItemCount() {
return info.size();
}
class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView image;
TextView title;
TextView subtitle;
public myViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.Image1);
title = (TextView) itemView.findViewById(R.id.TextTitle);
subtitle = (TextView) itemView.findViewById(R.id.TextSubTitle);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Intent intent = new Intent(context,ItemSelection.class);
context.startActivity(intent);
}
}
}
这是显示 RecyclerView 的片段的 activity:
public class ltfg0 extends Fragment {
private RecyclerView recyclerView;
private MyAdapter adapter;
public ltfg0() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_ltfg0, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.ltfg0);
adapter = new MyAdapter(getActivity(),getInfo());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return view;
}
public static List<Data> getInfo(){
List<Data> info = new ArrayList<>();
int[] srcs = {R.mipmap.img1, R.mipmap.img2, R.mipmap.img3, R.mipmap.img4};
String[] titles = {"Title 1", "Title 2", "Title 3", "Title 4"};
String[] subtitles = {"Description 1", "Description 2", "Description 3", "Description 4"};
for (int i=0; i<srcs.length && i<titles.length && i<subtitles.length;i++){
Data current = new Data();
current.imagenId = srcs[i];
current.title = titles[i];
current.subtitle = subtitles[i];
info.add(current);
}
return info;
}
}
我的数据class:
public class Data {
public int imagenId;
public String title;
public String subtitle;
}
您可以在 ViewHolder
:
@Override
public void onClick(View view) {
Intent intent = new Intent(context,ItemSelection.class);
Bundle bundle = new Bundle();
bundle.putSerializable("DATA",info.get(getAdapterPosition()));
intent.putExtras(bundle);
context.startActivity(intent);
}
然后通过 getIntent()
:
Activity#onCreate()
中检索您的实例
Data data = (Data)getIntent().getExtras().getSerializable("DATA");
//if you have a TextView, for example...
yourTextView.setText(data.getTitle());
当然,您的 Data
class 必须实施 Serializable
:
public class Data implements Serializale { ...