2016-11-19 5 views
1

У меня есть деятельность с тремя фрагментами, каждая с отдельным RecyclerView с кучей предметов. При прокрутке между фрагментами onClick() смешивается и щелчок по элементу в фрагменте 1 переходит в ту же позицию, но для элемента во фрагменте 3, что приводит к неправильному экрану. Я полагаю, чтобы различать страницы в обычном методе onClick(), который у меня установлен? Все фрагменты используют один и тот же адаптер, поэтому я не уверен, что это часть вины тогда? Не уверен, что код будет полезно здесь, но вот мой адаптер класс:Неверный щелчок вызвал список элементов с помощью адаптера просмотра recycler?

public class ExploreAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private static OnEntryClickListener mOnEntryClickListener; 
    private List<Explore> exploreList; 
    private List<String> trackedProjects; 
    private Context context; 
    private Typeface typeFace, italicTypeface, boldTypeface; 
    private int typeOfExplore; 
    private HashMap<String, Boolean> uniqueExploreItems; 
    private HashMap<String, Long> offSet; 
    private int firstSet, secondSet; 
    private boolean apiProcessing; 

    private String stringValue; 
    //firebase 
    private DatabaseReference mDatabase; 

    public void changeTracked(List<String> tracks) { 
     trackedProjects = tracks; 
     notifyDataSetChanged(); 
    } 


    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public TextView projectTitle, projectCompany; 
     public ImageView projectPicture; 
     private ShineButton projectTrack; 


     public MyViewHolder(View view) { 
      super(view); 
      projectTitle = (TextView) view.findViewById(R.id.exploreProjectTitle); 
      projectCompany = (TextView) view.findViewById(R.id.exploreProjectCompany); 
      projectPicture = (ImageView) view.findViewById(R.id.exploreProjectPicture); 
      projectTrack = (ShineButton) view.findViewById(R.id.exploreProjectTrack); 


      view.setOnClickListener(this); 
      projectTrack.setOnClickListener(this); 

     } 

     @Override 
     public void onClick(View v) { 
      if (mOnEntryClickListener != null) { 
       mOnEntryClickListener.onEntryClick(v, getAdapterPosition()); 

      } 
     } 

    } 



    public ExploreAdapter(Context mContext, List<Explore> explores, List<String> trackedProj, int typeOfE, String strV, HashMap<String, Boolean> uniqueE, HashMap<String, Long> offs, Typeface myTypeface, Typeface myTypefaceItalic, Typeface myTypefaceBold) { 
     context = mContext; 
     exploreList = explores; 
     typeFace = myTypeface; 
     italicTypeface = myTypefaceItalic; 
     boldTypeface = myTypefaceBold; 
     typeOfExplore = typeOfE; 
     uniqueExploreItems = uniqueE; 
     offSet = offs; 
     stringValue = strV; 

     apiProcessing = true; 
     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     trackedProjects = trackedProj; 

    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     return new MyViewHolder(LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.explore_item, parent, false)); 


    } 


    public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) { 
     mOnEntryClickListener = onEntryClickListener; 
    } 

    public interface OnEntryClickListener { 
     void onEntryClick(View view, int position); 
    } 


    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
      MyViewHolder myViewHolder = (MyViewHolder) holder; 
      Explore proj = exploreList.get(position); 
      myViewHolder.projectTitle.setTypeface(boldTypeface); 
      myViewHolder.projectCompany.setTypeface(italicTypeface); 
      myViewHolder.projectTitle.setText(proj.getProjectTitle()); 
      myViewHolder.projectCompany.setText(proj.getSubTitle()); 

      //for updates 
      if(typeOfExplore == 1) { 
       String createImagePath = Constants.PHASES_IMAGE + proj.getProjectPicture(); 
       Picasso.with(context).load(createImagePath).placeholder(R.drawable.default_liovinci_bg).resize(320, 240).into(myViewHolder.projectPicture); 

      } else { 
       String createImagePath = Constants.PROJECT_IMAGE + proj.getProjectPicture(); 
       Picasso.with(context).load(createImagePath).placeholder(R.drawable.default_liovinci_bg).resize(320, 240).into(myViewHolder.projectPicture); 

      } 

     if(typeOfExplore == 1 || typeOfExplore == 2) { 

      myViewHolder.projectTrack.setVisibility(View.GONE); 
     } else { 
      if(trackedProjects != null && trackedProjects.contains(proj.getProjectId())) { 

       myViewHolder.projectTrack.setColorFilter(ContextCompat.getColor(context, R.color.actionBlue), PorterDuff.Mode.SRC_IN); 
       myViewHolder.projectTrack.setChecked(true); 
      } else { 

       myViewHolder.projectTrack.setColorFilter(ContextCompat.getColor(context, R.color.bottomBarGray), PorterDuff.Mode.SRC_IN); 


      } 

     } 
+1

ссылка http://stackoverflow.com/questions/24471109/recyclerview-onclick – sasikumar

ответ

2

Если вы используете вид пейджер, то он инициализирует все фрагменты, которые вы привязаны к этой точке зрения пейджеру. Поэтому, наконец, он инициализирует последний фрагмент, и ваш класс адаптера будет содержать контекст из вашего последнего инициализированного фрагмента.

Именно по этой причине. поэтому для преодоления вашей проблемы вы должны сделать другой адаптер для разных фрагментов.

+0

Спасибо, так это сработало! – Lion789

Смежные вопросы