Как перерисовать родительский Фрагмент RecyclerView при изменении его содержимого - PullRequest
0 голосов
/ 17 мая 2019

Я построил очень простой интернет-магазин. Я перемещаюсь по приложению с помощью BottomNavigationView (есть одно действие, содержащее navBar и несколько фрагментов, которые открываются из этой панели). Во фрагменте для корзины покупок я даю возможность удалить товары из корзины.

Тогда возникают следующие проблемы:

  • Я удаляю элемент, но обновляется только RecyclerView, а не весь фрагмент.
  • Это проблема, поскольку макет фрагмента зависит от содержимого RecyclerView (если recyclerView пуст → скрыть весь макет и т. Д.)

Итак, вот мой onBindViewHolder для RecyclerView:

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? Есть ли другой способ достичь желаемого поведения?

1 Ответ

0 голосов
/ 21 мая 2019

Если кто-то еще сталкивался с этим: я наконец решил проблему с интерфейсом :

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...