Я установил ресайклервью для тех же данных Api на двух фрагменты. После нажатия на одну из Card, новый фрагмент детали для той же карты открывается на другом фрагменте. Cardview содержит изображения. После нажатия на одно из изображений мне нужно получить информацию об этом Положение CardView. Но когда я нажимаю на одну из карт в FirstFragment и перехожу к той же карте position в SecondFragment, но я смахиваю на другие карты и нажимаю на изображение другого CardView, все же я получаю информацию для той же карты, которая была нажата первой.
Это код для Adapter
class public class StatusInfoAdapter extends RecyclerView.Adapter<StatusInfoAdapter.ViewHolder> {
private FragmentManager fm;
private FragmentTransaction tx;
private ArrayList<StatusEntry> entries;
private int finalPos,tempPos;
Context context;
String People, id,Id;
SnackBarAlert alertMsg=new SnackBarAlert();
private String myToken;
public StatusInfoAdapter(ArrayList<StatusEntry> entries, Context context) {
this.entries = entries;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.status_info_card, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder,int position) {
StatusEntry entry = entries.get(position);
tempPos = holder.getAdapterPosition();
finalPos = tempPos + 1;
holder.id.setText(entry.getid());
holder.Idno.setText(entry.getidno());
holder.fname.setText(entry.getFname());
holder.lname.setText(entry.getLname());
holder.people.setText(entry.getPeople());
noOfPeople = entries.get(position).getPeople();
fid = entries.get(position).getFyraid();
Id = entries.get(position).getid();
}
@Override
public int getItemCount() {
return entries.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView fname;
public TextView lname;
public TextView people;
public TextView d;
TextView Idno;
ImageView cancelEntry;
public ViewHolder(View v) {
super(v);
SharedPreferences preferences=context.getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
fname = (TextView) v.findViewById(R.id.fname);
lname = (TextView) v.findViewById(R.id.lname);
people = (TextView) v.findViewById(R.id.adults);
fyra_id = (TextView) v.findViewById(R.id.fyraid);
Idno = (TextView) v.findViewById(R.id.Id);
cancelEntry = (ImageView) v.findViewById(R.id.cancel);
cancelEntry.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
final AppCompatActivity activity = (AppCompatActivity) v.getContext();
final Dialog dialog=new Dialog(activity);
dialog.setContentView(R.layout.cancel_reason);
dialog.show();
Button yes = (Button) dialog.findViewById(R.id.yes);
Button no = (Button) dialog.findViewById(R.id.no);
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
removeFromQueue();
alertMsg.infoMessage(v,"Removed from List");
entries.remove(tempPos);
notifyItemRemoved(tempPos);
ChooseTab chooseTab1=new ChooseTab();
fm=activity.getSupportFragmentManager();
CurrentStatus currentStatus=new CurrentStatus();
tx=fm.beginTransaction();
tx.detach(currentStatus);
tx.attach(currentStatus);
tx.replace(R.id.frame,chooseTab1);
tx.commit();
}
});
}
});
}
}
Это код для установки RecyclerView
JsonArrayRequest request=new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try{
for(int i=0;i<response.length();i++)
{
JSONObject object=response.getJSONObject(i);
final StatusEntry entry=new StatusEntry();
String id=object.getString("fid");
Idno=object.getString("idno");
JsonObjectRequest(Request.Method.GET,url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String first_name=response.getString("firstname");
String last_name=response.getString("lastname");
String id=response.getString("id");
entry.setFname(first_name);
entry.setLname(last_name);
entry.setid(id);
entry.setidNo(Idno);
adapter.notifyDataSetChanged();
progressDialog.hide();
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
})
};
AppController.getInstance().addToRequestQueue(foodie_request,foodie_data);
String no_of_people=object.getString("no_people");
entry.setPeople(no_of_people);
progressDialog.dismiss();
entries.add(entry);
adapter = new StatusInfoAdapter(entries, getActivity().getApplicationContext());
recyclerView.setAdapter(adapter);
}
}catch(JSONException e)
{
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
})
};
AppController.getInstance().addToRequestQueue(request,foo_request);
}
Я получаю один и тот же Idno для всех CardView после перехода на другие карты. Как решить эту проблему?
передать модель списка в конструкторе фрагмента во время начала транзакции и получить ее, создав такую же модель в другом фрагменте из конструктора
Проблема в том, что я не получаю данные карты о позиции карты.