Как обновить действие из адаптера в java

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

Метод общей цены находится в MainActivity, а выбранные элементы корзины - в RecyclerView.

Просто хочу обновить активность от адаптера

public class Cart extends AppCompatActivity {

......

public void refreshActivtiy(){
            recreate();
    }
}

//Адаптер

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

    public void onBindViewHolder(@NonNull final CartAdapter.CartViewHolder holder, final int position) {

Cart cart = new Cart();
cart.refreshActivity();
}
}

Не работает!!!


person Zain    schedule 20.06.2020    source источник
comment
прикрепите обратный вызов прослушивателя к адаптеру и реализуйте его в действии   -  person Zain    schedule 20.06.2020
comment
Добро пожаловать в StackOverflow! Вы должны добавить код к вопросу. Узнайте, как создать минимальный воспроизводимый пример stackoverflow.com/help/minimal-reproducible-example.   -  person EraftYps    schedule 20.06.2020
comment
использовать контекст активности или getActivity().refreshActivity(); нет необходимости создавать новую активность «Объект корзины».   -  person Zahoor Saleem    schedule 20.06.2020
comment
Это действительно работает! Спасибо @ZahoorSaleem   -  person Zain    schedule 24.06.2020


Ответы (2)


Вы можете создать интерфейс в адаптере, который вам нужно будет реализовать в Activity.

Попробуйте это в своем адаптере:

public class CartAdapter(AdapterInteractions listener) extends RecyclerView.Adapter<CartAdapter.CartViewHolder> {

    interface AdapterInteractions {
        public void refreshActivity();
    }

    public void onBindViewHolder(@NonNull final CartAdapter.CartViewHolder holder, final int position) {
        ...
        listener.refreshActivity();
    }
}

Реализация интерфейса в вашей деятельности:

public class Cart extends AppCompatActivity implements AdapterInteractions {

     ....
     @Override   
     public void refreshActivity(){  
         recreate();
     } 
}
person milancodes    schedule 20.06.2020
comment
Не могли бы вы быть более конкретным, @Zain? Я использую этот подход в своих приложениях и пока не сталкивался с ошибками. - person milancodes; 24.06.2020
comment
Я получил так много ошибок в классе адаптера при применении вашего кода, но в любом случае я получил решение Большое спасибо - person Zain; 24.06.2020

Решение

((Cart)context).refreshActivtiy();
person Zain    schedule 24.06.2020