簡體   English   中英

錯誤點擊使用回收器視圖適配器調用了項目列表嗎?

[英]Wrong On Click called for list of items using recycler view adapter?

我有一個包含三個片段的活動,每個片段都有一個帶有一堆物品的單獨的RecyclerView 在片段之間滾動時, onClick()變得混亂不清,並單擊片段1中的項目到相同位置,但是對於片段3中的項目,因此將我帶到錯誤的屏幕。 我是否可以在已設置的自定義onClick()方法中區分頁面? 所有片段都使用相同的適配器,所以我不確定這是否應該歸咎於那? 不知道什么代碼在這里有用,但是這是我的適配器類:

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);


            }

        }

如果您正在使用視圖尋呼機,則它將初始化綁定到該視圖尋呼機的所有片段。 因此,最后它將初始化最后一個片段,並且您的適配器類將包含來自最后一個初始化的片段的上下文。

這就是原因。 因此,要克服您的問題,您應該為不同的片段制作不同的適配器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM