Как реализовать ArrayList объектов в качестве представлений в RecyclerView ViewHolder? - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь заполнить RecyclerView уникальными представлениями (Buttons, TextViews, Views и т. Д.) Через ArrayList из ArrayLists of Objects.Просто знайте, что первый элемент Object на самом деле является идентификатором представления.

Проблема в том, что я не уверен, как вызвать конкретное представление, используя объект ViewHolder в методе onBindViewHolder, поскольку все представления инициализируются вArrayList.Это то, что я пробовал, но эта строка detailsViewHolder.((TextView) viewTypes.get(i)).setText("A Text"); даже синтаксически неверна.

private class DetailsAdapter extends RecyclerView.Adapter<DetailsAdapter.DetailsViewHolder> {

    private ArrayList<ArrayList<Object>> viewBundle;

    public DetailsAdapter(ArrayList<ArrayList<Object>> viewBundle){
        this.viewBundle = viewBundle;
        viewTypes = new ArrayList<>();
    }

    public class DetailsViewHolder extends RecyclerView.ViewHolder{

        private ArrayList<View> viewTypes;

        public DetailsViewHolder(View itemView){
            super(itemView);
            viewTypes = new ArrayList<>();
            for (int i = 0; i < viewBundle.size(); i++) {
                viewTypes.add(itemView.findViewById((Integer) viewBundle.get(i).get(0)));
            }
        }
    }

    @Override
    public int getItemCount() {
        return viewBundle.size();
    }

    @NonNull
    @Override
    public DetailsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
        View resItemView = LayoutInflater.from(parent.getContext()).inflate((Integer) viewBundle.get(i).get(1), parent, false);
        DetailsViewHolder viewHolder = new DetailsViewHolder(resItemView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull DetailsViewHolder detailsViewHolder, int i) {
        detailsViewHolder.((TextView) viewTypes.get(i)).setText("A Text");
    }


}

1 Ответ

0 голосов
/ 31 декабря 2018

Ну, я получил его для работы со статическими массивами (не уверен насчет ArrayList).

        public DetailsViewHolder(View itemView){
            super(itemView);
            viewTypes = new View[viewBundle.size()];
            for (int i = 0; i < viewBundle.size(); i++) {
                viewTypes[i] = (itemView.findViewById((Integer) viewBundle.get(i).get(0)));
            }
        }

Так что да, это решило проблему.

((TextView) detailsViewHolder.viewTypes[i]).setText("A Text");

...