【问题标题】:How to set textView in a recyclerView at desired position如何在所需位置的 recyclerView 中设置 textView
【发布时间】:2015-12-07 22:15:24
【问题描述】:

我有一个 recyclerView,其中我有一个显示在 LinearLayout 中的项目列表。每个列表中都有一个“增加”按钮,它会将数量增加“1”。但是当我单击第一个列表上的按钮时增加数字的项目..增加的值显示在 recyclerView 的最后一个列表项中,而不是我单击的所需位置。有人可以帮我找到解决方案吗?

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    myholder = holder;
    holder.item_name_text.setText(data.get(position).getName());
    holder.item_price_text.setText(data.get(position).getPrice().toString());
    holder.item_quantity_text.setText("500");

    //Adding item to the cart
    holder.add_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(totalItem>=0 && totalItem<10){
                totalItem++;

                myholder.item_totalquantity_text.setText(String.valueOf(totalItem));
            }else{
                Toast.makeText(myholder.itemView.getContext(),"Cannot add more item",Toast.LENGTH_SHORT).show();
            }
        }
    });

【问题讨论】:

    标签: android textview android-recyclerview


    【解决方案1】:

    所以我一直认为 recyclerviews 是显示我的数据的前端。如果您想对实际数据本身进行更改并确保它反映在 recyclerview 中,则需要确保在 data 对象的数组列表中进行更改。

    您需要在data 对象中添加一个字段并将其命名为counter。然后,一旦用户单击 onClickListener,您就必须增加计数器。

    myholder.item_totalquantity_text.setText(data.get(position).setCounter(data.get(position).getCounter())+1);
    

    【讨论】:

    • 这是一个值得注意的重点。但是如果我不想在数据对象的计数器变量中存储一个计数器怎么办。还有其他解决方法吗。
    • 很遗憾没有。正如我所提到的,recyclerview 仅用于演示,它将根据数据对象呈现您提供的任何内容。您将需要在数据对象中创建计数器以保持跟踪,以便 recyclerview 可以从中读取并正确显示。
    • 好的,谢谢兄弟。我会照顾它的。你帮了很大的忙。
    【解决方案2】:

    不要在 onBindViewHolder() 中设置 OnClickListener()。而是在您的 ViewHolder 类本身中执行此操作。主要是因为 RecyclerView 重新使用持有者对象来表示正在变得可见的新数据集。因此,您单击的侦听器可能属于其他视图持有者,因此它会出现在那里。

    快速阅读thisthis。这些与您不太相关,但它提供了了解回收概念的信息,因此您可以轻松修复您的东西。

    【讨论】:

    • 所以根据你给出的建议,我想我将无法使用 recyclerView 来达到我期望的结果。
    • 你可以的。但不要在 ViewHolder 本身中调用 setOnclickListener。你必须有这样的东西: public static class VHFriends extends RecyclerView.ViewHolder implements View.OnClickListener { public ImageView addImage;公共 VHFriends(查看 itemView) { .. addImage = findViewByID(); addImage.setOnClickListener(new .....); } }
    • 好的,我一定会更新代码。是的,你是对的,我在适配器中有一个自定义视图。
    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多