В настоящее время мы разрабатываем приложение для Android, но мы входим в проблему.Как получить правильный элемент из recyclerView
У нас есть recyclerView, которые заполняются CardView на основе результатов базы данных. Внутри CardView есть кнопка.
Теперь мы пытаемся создать эффект onclick на кнопке (это работает).
Но когда мы нажимаем кнопку в cardView, мы хотим, чтобы код возвращал идентификатор specefic для этого cardView.
Мы пытались использовать
getParent()
но возвращает тот же cardview даже если нажать кнопку на другом cardView. Возможно ли это, не создавая onClick самого recyclerView?
Мы хотим, чтобы уникальный идентификатор cardview
Edit:
Мы хотим, чтобы кнопка на карту, чтобы извлечь информацию на этой карте
Фрагмент:
package info.androidhive.materialnavbar.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import info.androidhive.materialnavbar.Activity.MainActivity;
import info.androidhive.materialnavbar.CardItem;
import info.androidhive.materialnavbar.R;
import info.androidhive.materialnavbar.ViewAdapters.RVAdapter;
/**
* Created by bart on 10-6-2015
* 2015 - 06
* Superclass for all Information Fragments
* Class handles the inflation of the RecyclerView and the XML files
*/
public class InformationFragment extends Fragment {
private RecyclerView recyclerView;
private RVAdapter mRecyclerViewAdapter;
private View containerView;
private static List<CardItem> CardEntry;
private Map<Integer, String> mFragmentTags;
public static boolean refresh = false;
//haalt list leeg
public void refreshFragment(){
// zet fragment op null
Fragment frg = null;
frg = getFragmentManager().findFragmentById(2131296339);
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frg);
ft.attach(frg);
ft.commit();
}
// recycler list
public List<CardItem> getCardData(int type) {
CardEntry = new ArrayList<>();
// tijdelijk knop voor testing
int reporticon = R.drawable.reporttemp;
switch (type) {
case 0:
// Vull kaartjes met volgende items :
CardEntry.add(new CardItem("Today", "string a", R.drawable.ic_facts,reporticon));
CardEntry.add(new CardItem("Today", "string a", R.drawable.ic_facts,reporticon));
CardEntry.add(new CardItem("Today", "string a", R.drawable.ic_facts,reporticon));
CardEntry.add(new CardItem("Today", "string a", R.drawable.ic_facts,reporticon));
CardEntry.add(new CardItem("Today", "string a", R.drawable.ic_facts,reporticon));
CardEntry.add(new CardItem("Today", "string a", R.drawable.ic_facts,reporticon));
//workaround
//zet case type om naar cardcounter > inflater > refresh
MainActivity.cardcounter = 0;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
case 1: // V title Vcontent V img
CardEntry.add(new CardItem("Facts", "string a", R.drawable.ic_birthdays,reporticon));
//workaround
MainActivity.cardcounter = 1;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
case 2:
CardEntry.add(new CardItem("History", "string a", R.drawable.ic_history,reporticon));
//workaround
MainActivity.cardcounter = 2;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
case 3:
CardEntry.add(new CardItem("Birthday", "string a", R.drawable.ic_lifehacks,reporticon));
//workaround
MainActivity.cardcounter = 3;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
case 4:
CardEntry.add(new CardItem("Lifehacks", "string a", R.drawable.ic_facts,reporticon));
//workaround
MainActivity.cardcounter = 4;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
case 5:
CardEntry.add(new CardItem("Quotes", "string a", R.drawable.ic_facts,reporticon));
//workaround
MainActivity.cardcounter = 5;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
case 6:
CardEntry.add(new CardItem("Favorites", "string a", R.drawable.ic_facts,reporticon));
//workaround
MainActivity.cardcounter = 6;
if (!refresh){
refreshFragment();
refresh = true;
}
break;
}
return CardEntry;
}
public List<CardItem> getCardEntry() {
return CardEntry;
}
// end recycler
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment * iets aangepast, return onderaan voor recycler drawer
View layout = inflater.inflate(R.layout.fragment_content, container, false);
// pak het id van de recycler uit xml
recyclerView = (RecyclerView) layout.findViewById(R.id.RecyclerCardList);
// haal de data op uit de return/switch hier boven
//
mRecyclerViewAdapter = new RVAdapter(getCardData(MainActivity.cardcounter));
//
recyclerView.setAdapter(mRecyclerViewAdapter);
// zet hem als dit op deze activity
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return layout;
}
}
адаптер :
package info.androidhive.materialnavbar.ViewAdapters;
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import info.androidhive.materialnavbar.Activity.DownloadImageTask;
import info.androidhive.materialnavbar.Animations;
import info.androidhive.materialnavbar.CardItem;
import info.androidhive.materialnavbar.R;
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
// Recycler View Adapter
public static class PersonViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView personName;
TextView personAge;
ImageView personPhoto;
ImageButton FavBut;
ImageButton ReportBut;
PersonViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
personName = (TextView) itemView.findViewById(R.id.person_name);
personAge = (TextView) itemView.findViewById(R.id.person_age);
personPhoto = (ImageView) itemView.findViewById(R.id.person_photo);
FavBut = (ImageButton) itemView.findViewById(R.id.FavBut);
ReportBut = (ImageButton) itemView.findViewById(R.id.ReportBut);
}
}
List<CardItem> cardItems;
public RVAdapter(List<CardItem> cardItems) {
this.cardItems = cardItems;
}
public Object getCard(int position) {
return cardItems.get(position);
}
public List<CardItem> getCardItems() {
return cardItems;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.carditem, viewGroup, false);
PersonViewHolder pvh = new PersonViewHolder(v);
return pvh;
}
// de 'onCreate'
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
// vult het object/element met
personViewHolder.personName.setText(cardItems.get(i).name);
personViewHolder.personAge.setText(cardItems.get(i).age);
personViewHolder.personPhoto.setImageResource(cardItems.get(i).photoId);
//fav
personViewHolder.FavBut.setImageResource(cardItems.get(i).favId);
//report
personViewHolder.ReportBut.setImageResource(cardItems.get(i).reportId);
//zet animation op dit object/element
Animations.animateScatter(personViewHolder, true);
}
@Override
public int getItemCount() {
return cardItems.size();
}
}
Что вы пытаетесь сделать с идентификатором View? Я думаю, вы получаете одинаковый идентификатор, потому что RecyclerView повторно использует Views. –
можете ли вы опубликовать класс Adapter & Fragment? –
Я обновил проблему, так что теперь она более конкретна. – Lozeputten