【问题标题】:Changing ArrayList shown in RecyclerView Android Java更改 RecyclerView Android Java 中显示的 ArrayList
【发布时间】:2020-04-12 10:09:16
【问题描述】:

我在一个数组列表中有多个数组列表:

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

我在一次显示一个数组列表的回收视图中显示第一个数组列表:

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

我想单击另一个类中的一个按钮,该按钮将显示更改显示的数组列表。我将如何实现这一目标?

Recycler View 适配器类:

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

        }
    }

}

【问题讨论】:

    标签: java android arrays android-recyclerview


    【解决方案1】:

    在你的 RecyclerView.Adapter 中设置一个 setter:

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

    这样您就可以使用新数据在该按钮的 onClick() 中调用它。

    这将使用传递的数据更新适配器的模型,并通知 recyclerview 其数据已更改。

    【讨论】:

      【解决方案2】:

      你在你选择的对象上创建一个onClickListener,然后当你点击它时,你只需setCityList到新数据并在你的适配器上使用notifydatasetchanged

      【讨论】:

        猜你喜欢
        • 2017-12-30
        • 2018-01-01
        • 2021-11-24
        • 2017-12-09
        • 1970-01-01
        • 2016-10-13
        • 2019-11-16
        • 2018-06-03
        • 2016-07-01
        相关资源
        最近更新 更多