Изменение ArrayList показано в RecyclerView Android Java - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть несколько списков массивов в массиве списков:

[[Object1, Object2],[Object3, Object4],[Object5, Object6]]

Я отображаю первый список массивов в обзоре переработчика, который отображает один массив за раз:

myViewHolder.bindTo(cities.get(0).get(i));

Я хочу нажмите кнопку в другом классе, который покажет изменение списка показанных массивов. Как бы мне этого добиться?

Recycler View Adapter Class:

    private List<List<Country>> cities;

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        PlannerItemBinding plannerItemBinding =
                DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.planner_item, viewGroup, false);

        return new MyViewHolder(plannerItemBinding);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
        myViewHolder.bindTo(cities.get(0).get(i));

    }

    @Override
    public int getItemCount() {
        if (cities != null) {
            return cities.size();
        } else {
            return 0;
        }
    }

    public void setCityList(List<List<Country>> cities) {
        this.cities = cities;
        notifyDataSetChanged();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        private PlannerItemBinding plannerItemBinding;

        public MyViewHolder(@NonNull PlannerItemBinding plannerItemBinding) {
            super(plannerItemBinding.getRoot());

            this.plannerItemBinding = plannerItemBinding;
        }

        void bindTo(Country country) {
            plannerItemBinding.setVariable(com.example.planner.BR.city, country);
            plannerItemBinding.setVariable(com.example.planner.BR.adapterPosition, getLayoutPosition());
            plannerItemBinding.setVariable(com.example.planner.BR.countryImageMedium, country.getImages().get(0).getSizes().getMedium());
            plannerItemBinding.executePendingBindings();

        }
    }

}

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Установите установщик в вашем RecyclerView.Adapter:

public updateCities(List<List<Coutry>> cities) {
    this.cities = cities;
    notifydatasetchanged();
}

, чтобы вы могли вызвать его в onClick () этой кнопки с новыми данными.

Это обновит модель вашего адаптера с переданными данными и уведомите переработчика о том, что его данные изменились.

1 голос
/ 12 апреля 2020

Вы создаете onClickListener для объекта по вашему выбору, а затем, когда он щелкает, вы просто setCityList получаете новые данные и используете notifydatasetchanged на своем адаптере

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