Jav*_*ero 2 android list android-recyclerview
我试图将具有X位置的RecyclerView项的值发送到其他显示这些值的活动,例如,在我的RecyclerView我的X项中,具有图像,标题和字幕;并且我希望onClick可以显示在图像,标题和字幕等其他活动中。通过这种方式,我的其余项目。我认为应该使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是显示RecyclerView的片段的活动:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
和我的数据类:
public class Data {
public int imagenId;
public String title;
public String subtitle;
}
Run Code Online (Sandbox Code Playgroud)
您可以在您的内部执行以下操作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);
}
Run Code Online (Sandbox Code Playgroud)
然后在Activity#onCreate()via中检索您的实例getIntent():
Data data = (Data)getIntent().getExtras().getSerializable("DATA");
//if you have a TextView, for example...
yourTextView.setText(data.getTitle());
Run Code Online (Sandbox Code Playgroud)
当然,您的Data课程必须实现Serializable:
public class Data implements Serializale { ...
Run Code Online (Sandbox Code Playgroud)