Passer RecyclerView CardView Cliquez sur l'élément Données à l'activité

J'ai une question sur le passage des données de la carte cardiaque cliquées à l'activité, et voici l'histoire complète:

  1. J'ai une activité appelée «Détails», qui contient 2 TextViews dans sa mise en page, Titre et Description.

  2. J'ai configuré un fragment (tab_1) qui contient les codes de recyclage et les données d'éléments, dont chacun contient: titre et description.

Ce que je veux :

Lorsque l'utilisateur clique sur l'élément, il ouvrira l'activité Détails et modifiera le titre de la disposition des Détails, avec le titre de l'élément cliqué, et le même pour la description.

J'ai eu l'habitude de créer l'autre activité à titre d'exemple, et j'ai l'intention de le démarrer, plus en ajoutant "addOnTouchlistener" grâce à Stackoverflow, j'ai trouvé la façon de le faire.

Alors, comment le rendre vivant? J'ai essayé de nombreuses façons de trouver les réponses disponibles sur Stackoverflow, mais toutes ne fonctionnent pas ou ne sont pas liées à ma demande.

Voici mes fichiers:

Itemsdata.java:

public class itemsdata { int CatPic; String title; String Descr; int Exapnd; int expand_no; 

Tab_1.java (fragment)

 public class tab_1 extends Fragment implements SearchView.OnQueryTextListener { private RecyclerView mRecyclerView; public RecyclingViewAdapter adapter; private Activity context; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.tab_1, container, false); mRecyclerView = (RecyclerView)layout.findViewById(R.id.recycler_view); mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener (getContext(), new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Intent i = new Intent(view.getContext(), DetailsActivity.class); view.getContext().startActivity(i); } })); mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new RecyclingViewAdapter(getActivity(),Listed()); mRecyclerView.setAdapter(adapter); return layout; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main, menu); final MenuItem item = menu.findItem(R.id.action_search); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener(this); } @Override public boolean onQueryTextChange(String query) { final List<itemsdata> filteredModelList = filter(Listed(), query); adapter.animateTo(filteredModelList); mRecyclerView.scrollToPosition(0); return true; } @Override public boolean onQueryTextSubmit(String query) { return true; } private List<itemsdata> filter(List<itemsdata> models, String query) { query = query.toLowerCase(); final List<itemsdata> filteredModelList = new ArrayList<>(); for (itemsdata model : models) { final String text = model.title.toLowerCase(); if (text.contains(query)) { filteredModelList.add(model); } } return filteredModelList; } public List<itemsdata> Listed() { //Titles Strings String sys_title1 = getString(R.string.system_item_title_1); String sys_title2 = getString(R.string.system_item_title_2); String sys_title3 = getString(R.string.system_item_title_3); //Description Strings String sys_descr1 = getString(R.string.system_item_desc_1); String sys_descr2 = getString(R.string.system_item_desc_2); String sys_descr3 = getString(R.string.system_item_desc_3); //Adding New Cards List<itemsdata> data = new ArrayList<>(); //Categories Icons New Items ** Make It The Same int[] icons = { R.drawable.facebook_icon , R.drawable.twitter_icon , R.drawable.twitter_icon }; //Expand Button New Items int[] expandbutton = { R.drawable.expanded , R.drawable.expanded , R.drawable.expanded }; //UnExpand Button New Items int[] unexpandbutton = { R.drawable.ca_expand , R.drawable.ca_expand , R.drawable.ca_expand }; //Titles New Items String[] titles = { sys_title1 , sys_title2 , sys_title3 }; //Description New Items String[] Description = { sys_descr1 , sys_descr2 , sys_descr3 }; for(int i = 0;i<titles.length && i < icons.length && i < Description.length && i < unexpandbutton.length && i < expandbutton.length ; i++) { itemsdata current = new itemsdata(); current.CatPic = icons[i]; current.title = titles[i]; current.Descr = Description[i]; current.expand_no = unexpandbutton[i]; current.Exapnd = expandbutton[i]; data.add(current); } return data; } } 

Détails Activité:

 public class DetailsActivity extends AppCompatActivity{ TextView title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.details); title = (TextView)findViewById(R.id.details_title); } 

EDIT: Je l'ai fait, j'ai ajouté un bouton qui ouvre le fragment et transmis les données, dans l'adaptateur, mais je le veux via tab_1.java, pas l'adaptateur, je veux dire que je veux cliquer sur l'élément pour Ouvrez le fragment, pas sur un bouton, ici un instantané de mon code adaptateur (je l'ai ajouté dans OnBindViewHolder)

J'ai configuré un OnClick et mis en œuvre Vew.setOnClick ..etc, mais quand je clique sur l'élément, rien ne se produit.

  @Override public void onBindViewHolder(final MyRecycleViewHolder holder, int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(v.getContext(),DetailsActivity.class); v.getContext().startActivity(i); } }); //Referencing Data final itemsdata currentobject = mdata.get(position); //Referencing Items holder.ProbTitle.setText(currentobject.title); holder.ProbDescr.setText(currentobject.Descr); holder.CategoryPic.setImageResource(currentobject.CatPic); holder.ExpandButton.setImageResource(currentobject.Exapnd); holder.ExpandNoButton.setImageResource(currentobject.expand_no); //What Happen When You Click Expand Button . holder.ExpandButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(v.getContext(), DetailsActivity.class); i.putExtra("TitleKey",holder.ProbTitle.getText().toString()); v.getContext().startActivity(i); } } ); public static class MyRecycleViewHolder extends RecyclerView.ViewHolder { SwipeLayout swipeLayout; //Defining Items . TextView ProbTitle; ImageButton ExpandButton; TextView ProbDescr; ImageButton ExpandNoButton; ImageView CategoryPic; /* TextView Card_Star; TextView Card_UnStar; */ TextView Card_Share; //Referencing Resources public MyRecycleViewHolder(final View itemView) { super(itemView); ProbTitle = (TextView) itemView.findViewById(R.id.prob_title); CategoryPic = (ImageView) itemView.findViewById(R.id.cat_pic); ProbDescr = (TextView) itemView.findViewById(R.id.prob_descr); ExpandButton = (ImageButton) itemView.findViewById(R.id.expand_button); ExpandNoButton = (ImageButton) itemView.findViewById(R.id.expand_no_button); /* Card_Star = (TextView) itemView.findViewById(R.id.card_star); Card_UnStar = (TextView) itemView.findViewById(R.id.card_unstar); */ Card_Share = (TextView) itemView.findViewById(R.id.card_share); swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe); } 

5 Solutions collect form web for “Passer RecyclerView CardView Cliquez sur l'élément Données à l'activité”

Créez une Interface intérieur de votre adaptateur contenant des methods . Et pendant la mise en œuvre de votre adaptateur, ces méthodes seront mises en œuvre dans votre activité et vous pouvez effectuer toutes les actions que vous souhaitez.

  public class Adapter extends RecyclerView.Adapter<MyRecycleViewHolder> { public interface Callbacks { public void onButtonClicked(String titleKey); } private Callbacks mCallbacks; public Adapter() { } @Override public MyRecycleViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_details, null); return new MyRecycleViewHolder(v); } @Override public void onBindViewHolder(final MyRecycleViewHolder holder, final int i) { holder.ExpandButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mCallbacks != null) { mCallbacks.onButtonClicked(holder.ProbTitle.getText().toString()); } } }); } @Override public int getItemCount() { return; } public void setCallbacks(Callbacks callbacks) { this.mCallbacks = callbacks; } } 

Vous pouvez essayer de le faire sur votre OnItemClick ()

Intent i = new Intent(view.getContext(), DetailsActivity.class); i.putExtra("title", yourTitle); i.putExtra("description", yourDescription); view.getContext().startActivity(i);

Et quand oncreate dans votre DetailActivity, faites ceci

String title = getIntent().getStringExtra("title"); String description = getIntent().getStringExtra("description");

Afin que vous puissiez passer le titre et la description à DetailActivity

Tout d'abord, créez votre objet "itemsdata" pour implémenter Parcelable. Vous pouvez le vérifier ici . Dans votre méthode OnItemClick, vous transférez l'objet à votre activité Détails en utilisant intention.putExtra ("clé", listOfDataItems.get (position)); Dans votre DétailsActivité, vous pouvez obtenir votre objet personnalisé avec getParcelable ("clé")

Toutes les méthodes ci-dessus ont fonctionné, mais un peu long, donc celui-ci a fonctionné pour moi:

 Cardview cardview; cardView = (CardView)itemView.findViewById(R.id.cv); cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i = new Intent (view.getContext(), DetailsActivity.class); i.putExtra("TitleKey",ProbTitle.getText().toString()); i.putExtra("DescrKey",ProbDescr.getText().toString()); view.getContext().startActivity(i); } }); 

Et dans Details.java:

  TextView title; TextView Descr; title = (TextView)findViewById(R.id.details_title); Descr = (TextView)findViewById(R.id.details_descr); String titleresult = result.getExtras().getString("TitleKey"); String Descrresult = result.getExtras().getString("DescrKey"); title.setText(titleresult); Descr.setText(Descrresult); 

IMO, vous setOnClickListener intérieur de Adapter of RecyclerView . Vous pouvez vous référer à mon exemple de code suivant, puis appliquer sa logique à votre code. J'espère que cela aide!

 public class MyRVAdapter extends RecyclerView.Adapter<MyRVAdapter.ViewHolder> { Context mContext; List<String> mStringList; public MyRVAdapter(Context mContext, List<String> mStringList) { this.mContext = mContext; this.mStringList = mStringList; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false); v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView textView1 = (TextView) v.findViewById(R.id.textView1); TextView textView2 = (TextView) v.findViewById(R.id.textView2); Bundle bundle = new Bundle(); bundle.putString("key1", textView1.getText().toString()); bundle.putString("key2", textView2.getText().toString()); passToAnotherActivity(bundle); } }); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, int position) { // do something... } @Override public int getItemCount() { if (mStringList != null) { return mStringList.size(); } return 0; } private void passToAnotherActivity(Bundle bundle) { if (mContext == null) return; if (mContext instanceof MainActivity) { MainActivity activity = (MainActivity) mContext; activity.passToAnotherActivity(bundle); // this method must be implemented inside `MainActivity` } } public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public ViewHolder(View itemView) { super(itemView); // do something... } @Override public void onClick(View v) { } } } 
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.