En Passant RecyclerView CardView Cliqué Sur L'Élément De Données Pour L'Activité
J'ai une question sur la transmission cliqué cardview données à l'activité, et ici l'histoire complète :
- J'ai une Activité intitulée "Détails", qui contient 2 TextViews dans sa mise en page, Titre & Description .
- J'ai de l'installation d'un fragment ( tab_1 ) qui contiennent les recyclerview les codes, et les éléments de données, chaque élément de ceux contenir : le titre & description .
Ce que je veux :
Lorsque l'utilisateur clique sur l'élément, elle sera ouverte les Détails de l'Activité, et de modifier les Détails de mise en page de titre, avec le titre de l'élément cliqué, et de même pour la description .
J'ai réussi à créer de l'activité, comme un exemple, et faite en intention de le faire démarrer, en plus de l'ajout de "addOnTouchlistener" grâce à Stackoverflow, j'ai trouvé le moyen de le faire .
Alors, comment faire de ce vivant? J'ai essayé de nombreuses façons de la réponse sur Stackoverflow, mais tous 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 De L'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 la Carte, mais je le veux via tab_1.java, pas la Carte, je veux dire que je veux cliquer sur l'élément pour ouvrir le fragment, non pas sur un bouton, voici un instantané de ma Carte code ( je l'ai ajouté dans OnBindViewHolder )
J'ai configuré un OnClick et mis en œuvre la Vew.setOnClick ..etc, mais quand je clique sur l'élément, rien ne se passe.
@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);
}
OriginalL'auteur Jaeger | 2015-12-22
Vous devez vous connecter pour publier un commentaire.
créer un
Interface
à l'intérieur de votre carte contenantmethods
. Et alors que la mise en œuvre de votre Carte, ces méthodes seront mises en œuvre dans votre activité et vous pouvez effectuer n'importe quelle action que vous voulez.OriginalL'auteur Vipul Asri
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,cela
String title = getIntent().getStringExtra("title");
String description = getIntent().getStringExtra("description");
de sorte que vous pouvez passer le titre et la description de DetailActivity
RecyclerView ne fournit pas onItemClickListener et onItemLongClickListener,vous devez le régler en carte seule...ou vous pouvez créer une interface adaptateur comme ce
public interface OnItemClickLitener { void onItemClick(View view, int position); void onItemLongClick(View view , int position); }
et de l'appeler quand chaque élément cliqué ou à long cliqué,alors vous pouvez définir un écouteur dans tab_1.java maintenant.Ouais, j'ai ajouté au début de cette manière, mais je n'étais pas en mesure de transmettre les données, de toute façon, je l'ai fait via le référencement cardview dans l'adaptateur et de transmettre les données à l'aide de l'intention.putExtras . btw, si vous avez des connaissances en searchview veuillez vérifier ma question dans mon profil, et merci pour votre réponse 🙂 .
chaque classe qui s'étendent de Vue peut définir une
onClickListener()
,cet écouteur à votre point de vue de la racine,pas besoin d'ajouter un nouveau bouton. et modifier cette lignei.putExtra("TitleKey",holder.ProbTitle.getText().toString());
ài.putExtra("TitleKey",currentobject.title);
`OriginalL'auteur chichiangho
Tout d'abord faire votre "itemsdata" objet de mettre en œuvre Parcelable. Vous pouvez le vérifier ici . Dans votre onItemClick méthode vous passer de l'objet pour les Détails de votre activité à l'aide de l'intention.putExtra("key",listOfDataItems.get(position));
Dans votre DetailsActivity vous pouvez obtenir votre objet personnalisé avec getParcelable("clé")
OriginalL'auteur Stefan
Toutes les méthodes ci-dessus ont travaillé, mais un peu long, ce qui a fonctionné pour moi :
Et dans Details.java :
qu'est-ce que les "résultats" ci-dessus que vous utilisez avec getExtras().getString()?
Est-il employé avec "avoir l'Intention de résultat = getIntent()"?
Oui, il est utilisé avec getIntent();
OriginalL'auteur Jaeger
De l'OMI, vous mettez en œuvre
setOnClickListener
à l'intérieur deAdapter
deRecyclerView
. Vous pouvez vous référer à mon exemple de code suivant, puis appliquer sa logique de votre code. Espérons que cela aide!OriginalL'auteur BNK