【问题标题】:How to get the List size() from adapter and update Activity UI from recycler Adapter itself?如何从适配器获取列表大小()并从回收器适配器本身更新 Activity UI?
【发布时间】:2018-02-21 10:53:46
【问题描述】:

我的适配器调用中有一个删除按钮,当我按下删除按钮时我想

1.从列表中删除值 并且,

2。更新主活动中列表的大小

和 . 已尝试使用我提到的接口 here,但 它不起作用,我很困惑。

那么谁能给我一个最好的方法

我的适配器代码:

@Override
public void onBindViewHolder(final AddLineItem_Adapter.ViewHolder holder, final int position) {
    final AddLineItem_ListView addLineItem_listView = addLineItem_listViews.get(position);

    holder.tv_OrderID.setText(addLineItem_listView.getItemID());
    holder.tv_ProductName.setText(addLineItem_listView.getProductName());
    holder.tv_Quantity.setText(addLineItem_listView.getQuantity());
    holder.tv_UnitPrice.setText(addLineItem_listView.getUnitPrice());
    holder.tv_TotalAmount.setText(addLineItem_listView.getTotalAmount());

    holder.btn_Delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addLineItem_listViews.remove(position);
            notifyDataSetChanged();
        }
    });
}

我想更新 TextView 中主要活动的 addLineItem_listView 大小。

【问题讨论】:

  • 你在 mainActivity 中显示在哪里??
  • addLineItem_listViews.size()
  • Java 是一种静态类型语言,在变量上添加 tv_ 前缀的理由为零
  • 我已经在我的主要活动中使用按钮手动实现了addLineItem_listViews.size(),但我想在不使用按钮单击的情况下显示addLineItem_listViews.size()
  • @EpicPandaForce 这只是为了我的理解

标签: android android-adapter


【解决方案1】:
  • 创建界面..
  • 将其传递给适配器..
  • 删除后调用接口函数(提供列表大小)

创建界面

public interface ShowDeleted {

void showDeleted(int size);

}

像这样在activity中匿名初始化界面

ShowDeleted showDeleted = new ShowDeleted() {
    @Override
    public void showDeleted(int size) {
         // show the changed list size or update UI
    }
};

将接口传递给recyclerAdapter

YourAdapter youradpter = new YourAdpater(context,list,showDeleted );

像这样初始化recyclerAdapter的构造函数:-

   public YourAdapter(Context context, YourList yourList, ShowDeleted 
                                                           showDeleted)
     {
            }

holder.onClick 这样做

holder.btn_Delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        addLineItem_listViews.remove(position);
        notifyDataSetChanged();
        this.showDeleted.showDeleted(addLineItem_listViews.size());
    }
});

【讨论】:

    【解决方案2】:

    尝试使用 view.setTag(position)

    @Override
    public void onBindViewHolder(final AddLineItem_Adapter.ViewHolder holder, final int position) {
        final AddLineItem_ListView addLineItem_listView = addLineItem_listViews.get(position);
    
        holder.tv_OrderID.setText(addLineItem_listView.getItemID());
        holder.tv_ProductName.setText(addLineItem_listView.getProductName());
        holder.tv_Quantity.setText(addLineItem_listView.getQuantity());
        holder.tv_UnitPrice.setText(addLineItem_listView.getUnitPrice());
        holder.tv_TotalAmount.setText(addLineItem_listView.getTotalAmount());
        holder.btn_Delete.setTag(position)
        holder.btn_Delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addLineItem_listViews.remove((Integer)v.getTag());
                notifyDataSetChanged();
            }
        });
    }
    

    祝你好运!

    【讨论】:

      【解决方案3】:

      使用这个功能

       public void removeAt(int position) {
          list.remove(position);
          notifyItemRemoved(position);
          notifyItemRangeChanged(position, list.size());
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        相关资源
        最近更新 更多