如何使用的onClick上RecyclerView使用onBindViewHolder?

问题描述 投票:0回答:1

我有一个字符串和图像的列表RecyclerView。但我需要点击图像时,他们改变形象,改变TextView的颜色像这样的视频(由我记录)It was supposed to be like that. but when I tap continue button they not select nothing这SetOnclickListener是它的onBindViewHolder内(我认为这是什么问题?)...

但在我的RecyclerView他们已经一个方法的onclick,我可以“操纵” Like this example,但我不知道如何使用.equals.valueAt的名单(54项)上的每个位置来实现。我只是想知道如何与使用onclick onBindViewHolder在一起

MY RecyclerView.java我对这个代码进行测试了这么多的东西,所以......不要霍里,遗憾的是,我除去了大部分的位置,因为我通过限制笑

在第一位置的那些评论是因为当我取消这些代码他们改变了图像和文本颜色,但他们没有选择另一个活动看到的第一个视频!

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

ArrayList<Categorias> TagsDaMarca;//change like this
ArrayList<Categorias> SubServicoTagsDaMarca;//change like this
ArrayList<Categorias> DICategorias;//change like this
ArrayList<String> DISubCategorias;

boolean test = false;
HashMap<Integer, List<String>> ListaCatSubCat = new HashMap<Integer, List<String>>();
public static SparseBooleanArray sparseBooleanArray;
// for identifying: in list which items are selected
OnRecyclerViewItemClickListener listener;
int meutotal = 0;


public RecyclerViewAdapter2(ArrayList<Categorias> TagsDaMarca1, OnRecyclerViewItemClickListener listener) {
    TagsDaMarca = TagsDaMarca1;
    SubServicoTagsDaMarca = TagsDaMarca1;
    DICategorias = TagsDaMarca1;

    sparseBooleanArray = new SparseBooleanArray();
    this.listener = listener;
}


@Override
public RecyclerViewAdapter2.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_marca_tag_servico_layout, parent, false);
    return new RecyclerViewAdapter2.ViewHolder(view);
}

@Override
public void onBindViewHolder(final RecyclerViewAdapter2.ViewHolder holder, int position) {

    Categorias item = DICategorias.get(position); //change like this

    if (position <= 0) {
//            holder.itemTextView.setOnClickListener(new View.OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    test = !test; //Switch boolean value
//                    holder.itemTextView.setFocusable(test);
//                    if (test == true) {
//                        holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
//                        holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_acessorios);
//                    } else {
//                        holder.DICategoriasIcones.setImageResource(R.drawable.categorias_acessorios);
//                        holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
//                    }
//                }
//            });
        holder.itemTextView.setText(item.getCategoria());
        holder.DICategoriasIcones.setImageResource(item.getImagem());
    } else if (position <= 1) {
        holder.DICategoriasIcones.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                test = !test; //Switch boolean value
                holder.itemTextView.setFocusable(test);
                if (test == true) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_animais);
                } else {
                    holder.DICategoriasIcones.setImageResource(R.drawable.categorias_animais);
                    holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                }

                if (sparseBooleanArray.equals(1)) {
                    if (meutotal < 4) {
                        test = !test; //Switch boolean value
                        holder.itemTextView.setFocusable(test);
                        if (test == true) {
                            holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                            holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_animais);
                        } else {
                            holder.DICategoriasIcones.setImageResource(R.drawable.categorias_animais);
                            holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                        }

                        sparseBooleanArray.put(getItemCount(), true);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal + 1;
                    } else {
                        sparseBooleanArray.put(getItemCount(), false);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal - 1;
                    }

                    if (!sparseBooleanArray.get(getItemCount())) {
                        if (meutotal < 4) {
                            holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                            sparseBooleanArray.put(getItemCount(), true);
                            holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_animais);
                            notifyItemChanged(getItemCount());
                            meutotal = meutotal + 1;
                        }
                    } else // if clicked item is already selected
                    {
                        sparseBooleanArray.put(getItemCount(), false);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal - 1;
                    }
                }
            }
        });
        holder.itemTextView.setText(item.getCategoria());
        holder.DICategoriasIcones.setImageResource(item.getImagem());
    } else if (position <= 2) {
        holder.DICategoriasIcones.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                test = !test; //Switch boolean value
                holder.itemTextView.setFocusable(test);
                if (test == true) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_arquitetura);
                } else {
                    holder.DICategoriasIcones.setImageResource(R.drawable.categorias_arquitetura);
                    holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                }

                if (sparseBooleanArray.equals(2)) {
                    if (meutotal < 4) {
                        test = !test; //Switch boolean value
                        holder.itemTextView.setFocusable(test);
                        if (test == true) {
                            holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                            holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_arquitetura);
                        } else {
                            holder.DICategoriasIcones.setImageResource(R.drawable.categorias_arquitetura);
                            holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                        }

                        sparseBooleanArray.put(getItemCount(), true);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal + 1;
                    } else {
                        sparseBooleanArray.put(getItemCount(), false);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal - 1;
                    }

                    if (!sparseBooleanArray.get(getItemCount())) {
                        if (meutotal < 4) {
                            holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                            sparseBooleanArray.put(getItemCount(), true);
                            holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_arquitetura);
                            notifyItemChanged(getItemCount());
                            meutotal = meutotal + 1;
                        }
                    } else // if clicked item is already selected
                    {
                        sparseBooleanArray.put(getItemCount(), false);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal - 1;
                    }
                }
            }
        });
        holder.itemTextView.setText(item.getCategoria());
        holder.DICategoriasIcones.setImageResource(item.getImagem());
    } else if (position <= 3) {
        holder.DICategoriasIcones.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                test = !test; //Switch boolean value
                holder.itemTextView.setFocusable(test);
                if (test == true) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_astrologia);
                } else {
                    holder.DICategoriasIcones.setImageResource(R.drawable.categorias_astrologia);
                    holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                }

                if (sparseBooleanArray.valueAt(0)) {
                    if (meutotal < 4) {
                        test = !test; //Switch boolean value
                        holder.itemTextView.setFocusable(test);
                        if (test == true) {
                            holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                            holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_astrologia);
                        } else {
                            holder.DICategoriasIcones.setImageResource(R.drawable.categorias_astrologia);
                            holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                        }

                        sparseBooleanArray.put(getItemCount(), true);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal + 1;
                    } else {
                        sparseBooleanArray.put(getItemCount(), false);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal - 1;
                    }

                    if (!sparseBooleanArray.get(getItemCount())) {
                        if (meutotal < 4) {
                            holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                            sparseBooleanArray.put(getItemCount(), true);
                            holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_astrologia);
                            notifyItemChanged(getItemCount());
                            meutotal = meutotal + 1;
                        }
                    } else // if clicked item is already selected
                    {
                        sparseBooleanArray.put(getItemCount(), false);
                        notifyItemChanged(getItemCount());
                        meutotal = meutotal - 1;
                    }
                }
            }
        });
        holder.itemTextView.setText(item.getCategoria());
        holder.DICategoriasIcones.setImageResource(item.getImagem());
    } else if (position <= 4) {
        test = !test; //Switch boolean value
        holder.itemTextView.setFocusable(test);

        if (sparseBooleanArray.equals(4)) {
            if (meutotal < 4) {
                test = !test; //Switch boolean value
                holder.itemTextView.setFocusable(test);
                if (test == true) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_atualidades);
                } else {
                    holder.DICategoriasIcones.setImageResource(R.drawable.categorias_atualidades);
                    holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                }

                sparseBooleanArray.put(getItemCount(), true);
                notifyItemChanged(getItemCount());
                meutotal = meutotal + 1;
            } else {
                sparseBooleanArray.put(getItemCount(), false);
                notifyItemChanged(getItemCount());
                meutotal = meutotal - 1;
            }

            if (!sparseBooleanArray.get(getItemCount())) {
                if (meutotal < 4) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    sparseBooleanArray.put(getItemCount(), true);
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_atualidades);
                    notifyItemChanged(getItemCount());
                    meutotal = meutotal + 1;
                }
            } else // if clicked item is already selected
            {
                sparseBooleanArray.put(getItemCount(), false);
                notifyItemChanged(getItemCount());
                meutotal = meutotal - 1;
            }
        }
        holder.itemTextView.setText(item.getCategoria());
        holder.DICategoriasIcones.setImageResource(item.getImagem());
    } else if (position <= 5) {
        test = !test; //Switch boolean value
        holder.itemTextView.setFocusable(test);

        if (sparseBooleanArray.equals(5)) {
            if (meutotal < 4) {
                test = !test; //Switch boolean value
                holder.itemTextView.setFocusable(test);
                if (test == true) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_autoconhecimento);
                } else {
                    holder.DICategoriasIcones.setImageResource(R.drawable.categorias_autoconhecimento);
                    holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
                }

                sparseBooleanArray.put(getItemCount(), true);
                notifyItemChanged(getItemCount());
                meutotal = meutotal + 1;
            } else {
                sparseBooleanArray.put(getItemCount(), false);
                notifyItemChanged(getItemCount());
                meutotal = meutotal - 1;
            }

            if (!sparseBooleanArray.get(getItemCount())) {
                if (meutotal < 4) {
                    holder.itemTextView.setTextColor(Color.rgb(236, 0, 140));
                    sparseBooleanArray.put(getItemCount(), true);
                    holder.DICategoriasIcones.setImageResource(R.drawable.sub_categorias_autoconhecimento);
                    notifyItemChanged(getItemCount());
                    meutotal = meutotal + 1;
                }
            } else // if clicked item is already selected
            {
                sparseBooleanArray.put(getItemCount(), false);
                notifyItemChanged(getItemCount());
                meutotal = meutotal - 1;
            }
        }
        holder.itemTextView.setText(item.getCategoria());
        holder.DICategoriasIcones.setImageResource(item.getImagem());
    } else if (position <= 6) {
        holder.itemTextView.setText(item.getCategoria());
        holder.itemTextView.setBackgroundColor(Color.TRANSPARENT);
        holder.DICategoriasIcones.setImageResource(item.getImagem());
        holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
        holder.DICategoriasIcones.setEnabled(true);
        holder.itemTextView.setEnabled(true);
    } else if (position <= 7) {
        holder.itemTextView.setText(item.getCategoria());
        holder.itemTextView.setBackgroundColor(Color.TRANSPARENT);
        holder.DICategoriasIcones.setImageResource(item.getImagem());
        holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
        holder.DICategoriasIcones.setEnabled(true);
        holder.itemTextView.setEnabled(true);
    } else {
        holder.itemTextView.setText(item.getCategoria());
        if (sparseBooleanArray.get(position)) {
            holder.itemTextView.setBackgroundColor(Color.TRANSPARENT);
            holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
        } else {
            holder.itemTextView.setBackgroundColor(Color.TRANSPARENT);
            holder.itemTextView.setTextColor(Color.rgb(190, 190, 190));
        }
    }

}

@Override
public int getItemCount() {
    if (TagsDaMarca != null) {
        return TagsDaMarca.size();
    } else if (SubServicoTagsDaMarca != null) {
        return SubServicoTagsDaMarca.size();
    } else if (DICategorias != null) {
        return DICategorias.size();
    }
    return 0;
}


/******** View Holder Class*/
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView itemTextView;
    ImageView DICategoriasIcones;
    public TextView alert;

    public ViewHolder(View itemView) {
        super(itemView);
        itemTextView = itemView.findViewById(R.id.itemTextView);
        itemTextView.setOnClickListener(this);

        DICategoriasIcones = itemView.findViewById(R.id.DICategoriasIcones);
        DICategoriasIcones.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

        if (!sparseBooleanArray.get(getAdapterPosition())) {
            if (meutotal < 4) {
                sparseBooleanArray.put(getAdapterPosition(), true);
                notifyItemChanged(getAdapterPosition());
                meutotal = meutotal + 1;
            }
        } else // if clicked item is already selected
        {
            sparseBooleanArray.put(getAdapterPosition(), false);
            notifyItemChanged(getAdapterPosition());
            meutotal = meutotal - 1;
        }
    }
}

public interface OnRecyclerViewItemClickListener {
    public void selectedItemCount(int count);
}
}

我已经有这个的onClick我RecyclerView但我怎么能与onBindViewHolder使用?

@Override
public void onClick(View view) {
        //meutotal is for loop to limit to select only 4 categories
    if (!sparseBooleanArray.get(getAdapterPosition())) {
        if (meutotal < 4) {
            sparseBooleanArray.put(getAdapterPosition(), true);
            notifyItemChanged(getAdapterPosition());
            meutotal = meutotal + 1;
        }
    } else // if clicked item is already selected
    {
        sparseBooleanArray.put(getAdapterPosition(), false);
        notifyItemChanged(getAdapterPosition());
        meutotal = meutotal - 1;
    }
}
}
android android-recyclerview
1个回答
0
投票

所述onBindViewHolder()方法被调用多次,并且可以使用可变更新, 创建一个变量selectedItemPosition = -1;现在只需设置变量在你的onClick()方法就是这样,

@Override
public void onClick(View view) {
        if(selectedItemPosition != getAdapterPosition()) {
          selectedItemPosition = getAdapterPosition();
          notifyDataSetChanged();
         } else {
           //handle what happens if the user clicks the same item again
         }

        //meutotal is for loop to limit to select only 4 categories
    if (!sparseBooleanArray.get(getAdapterPosition())) {
        if (meutotal < 4) {
            sparseBooleanArray.put(getAdapterPosition(), true);
            notifyItemChanged(getAdapterPosition());
            meutotal = meutotal + 1;
        }
    } else // if clicked item is already selected
    {
        sparseBooleanArray.put(getAdapterPosition(), false);
        notifyItemChanged(getAdapterPosition());
        meutotal = meutotal - 1;
    }
}
}

根据您的需要,这将是更好地使用彩色滤光片,而不是替换图像,因为它节省了空间,为你的应用程序,在您的onBindViewHolder()方法中添加以下代码,

if(selectedItemPosition != -1 && selectedItemPosition  == position) {
   viewHolder.imageView.setColorFilter(ContextCompat.getColor(mContext, R.color.yourcolor));
}
© www.soinside.com 2019 - 2024. All rights reserved.