Как разбить реселлервью на два раздела - PullRequest
0 голосов
/ 19 апреля 2020

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

public class GroceryListAdapter extends RecyclerView.Adapter<GroceryListAdapter.GroceryListViewHolder> {

    //private static final String LOG_TAG = "LOGGER: " + GroceryListAdapter.class.getSimpleName();
    private OnClickInListAdapter onClickInListAdapter;

    private List<GroceryItem> groceries;
    private Context context;
    private View strikeThroughLine;


    public GroceryListAdapter(Context context, List<GroceryItem> groceries) {

        this.groceries = groceries;
        this.context = context;
    }

    @Override
    public void onBindViewHolder(@NonNull final GroceryListViewHolder holder, final int position) {

        GroceryItem groceryItem = groceries.get(position);
        holder.bind(groceryItem);

        changeFont(groceries.get(holder.getAdapterPosition()).isChecked(), holder.itemView);
    }

    @NonNull
    @Override
    public GroceryListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        ListItemBinding listItemBinding = ListItemBinding.inflate(LayoutInflater.from(parent.getContext()),
                parent,
                false);

        return new GroceryListViewHolder(listItemBinding);
    }

    @Override
    public long getItemId(int position) {
        return groceries.get(position).getUid();
    }

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

    public void setGroceries(List<GroceryItem> groceries){
        this.groceries = groceries;
        notifyDataSetChanged();
    }

    private void changeFont(boolean isChecked, View view) {

        strikeThroughLine = view.findViewById(R.id.strike_through_line);
        if (isChecked) {
            strikeThroughLine.setVisibility(View.VISIBLE);

        } else {
            strikeThroughLine.setVisibility(View.GONE);
        }
    }
    public interface OnClickInListAdapter {

        void onClickInListAdapter(GroceryItem groceryItem);
    }

    public class GroceryListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        View groceryItem;

        ListItemBinding listItemBinding;
        private GroceryListViewHolder(ListItemBinding listItemBinding) {
            super(listItemBinding.getRoot());

            groceryItem = itemView.findViewById(R.id.grocery_item_view);
            this.listItemBinding = listItemBinding;
            itemView.setOnClickListener(this);
        }

        private void bind(GroceryItem groceryItem) {

            this.listItemBinding.setGrocery(groceryItem);
        }

        @Override
        public void onClick(View v) {

            onClickInListAdapter = (OnClickInListAdapter) context;

            if (!groceries.get(getAdapterPosition()).isChecked()) {
                groceries.get(getAdapterPosition()).setChecked(IS_CHECKED_TRUE);

                onClickInListAdapter.onClickInListAdapter(groceries.get(getAdapterPosition()));
            } else {
                groceries.get(getAdapterPosition()).setChecked(IS_CHECKED_FALSE);
                onClickInListAdapter.onClickInListAdapter(groceries.get(getAdapterPosition()));
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...