繁体   English   中英

如何在内容发生变化时重绘RecyclerView的父片段

[英]How to redraw parent Fragment of RecyclerView when its content changes

我建了一个非常简单的在线商店。 我使用BottomNavigationView浏览应用程序(有一个Activity包含navBar和从这个栏打开的多个Fragments)。 在购物车的片段中,我有机会从购物车中删除商品。

然后出现以下问题:

  • 我删除了该项目,但只更新了RecyclerView,而不是整个片段。
  • 这是一个问题,因为Fragment的布局依赖于RecyclerView的内容(如果recyclerView为空→隐藏整个布局等)

所以这是我的RecyclerView的onBindViewHolder:

CartAdapter:

@Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        final int pos = position;

        Item item = CartViewModel.getInstance().mShoppingCartItems.get(position);

        vh.nameTextView.setText(item.getmTitle());
        vh.quantityTextView.setText(String.valueOf("Anzahl: " + item.getmQuantity()));
        vh.priceTextView.setText("€ " + item.getmPrice());
        vh.nameTextView.setAllCaps(true);
        vh.deleteButton.setBackground(null);

        Picasso.with(mContext).load(item.getmPictureLink()).into(vh.pictureImageView);

        holder.deleteButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Item theRemovedItem = CartViewModel.getInstance().mShoppingCartItems.get(pos);
                CartViewModel.getInstance().mShoppingCartItems.remove(pos);
                notifyItemRemoved(pos);
                //force the parent Fragment to update it's layout
            }
        });
    }

基本上我的问题是:如何从CartAdapter更新片段的布局? 有没有其他方法可以实现所需的行为?

如果有人遇到这个问题:我终于通过界面解决了这个问题:

public interface CartCallback {
    void onMethodCallback();
}

CartAdapter:

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

    private CartCallback mAdapterCallback;

    CartAdapter(CartCallback callback) {
        this.mAdapterCallback = callback;
    }

    public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") final int position) {

        // ....

        holder.deleteButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                CartViewModel.getInstance().mShoppingCartItems.remove(position);
                notifyItemRemoved(position);
                mAdapterCallback.onMethodCallback();
            }
        });
    }
}

CartFragment:

public class CartFragment extends Fragment implements CartCallback {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        this.adapter = new CartAdapter(this);
    }

    @Override
    public void onMethodCallback() {
        Fragment frg = getActivity().getSupportFragmentManager().findFragmentByTag("CartFragment");
        final FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        ft.detach(frg);
        ft.attach(frg);
        ft.commit();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM