Android ViewGroup для ViewHolder

Я создаю простое приложение Todolist для Android с помощью Retrofit2. У меня есть адаптер-класс для создания Recyclerview с помощью списка Todos. Это работает без проблем (вот код):

public class TodolistAdapter extends RecyclerView.Adapter<TodolistAdapter.TodoViewHolder> {
private ArrayList<Todolist> todoData;

public static class TodoViewHolder extends RecyclerView.ViewHolder {

    public TextView todoView;

    public TodoViewHolder(TextView textView) {
        super(textView);
        todoView = textView;
    }
}
    public TodolistAdapter(ArrayList<Todolist> dataset) {
        todoData = dataset;
    }
    @Override
    public TodolistAdapter.TodoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create a new view
        TextView v = (TextView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.todolist_text_view, parent, false);

        TodoViewHolder vh = new TodoViewHolder(v);
        return vh;
    }

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final TodoViewHolder holder, final int position) {
    // - get element from your dataset at this position
    // - replace the contents of the view with that element
    holder.todoView.setText(todoData.get(position).getList_name());
    holder.todoView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String listID = todoData.get(position).getList_id();
            Intent intent = new Intent(holder.todoView.getContext(), TodoActivity.class);
            intent.putExtra("list_id", listID);
            holder.todoView.getContext().startActivity(intent);
        }
    });
}

// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    return todoData.size();
}

}

Я получаю список с Todos как TextViews. Теперь я хочу добавить флажок слева от TextView, чтобы отмечать / снимать отметку с одного задания.

Но я не знаю, как передать TextView и Checkbox ViewHolder. Нужно ли мне создавать Viewgroup внутри соответствующего xml и передавать ее в конструктор ViewHolder? Как мог выглядеть возможный xml? Я немного застрял здесь, потому что я новичок в мире Android View.

Кстати, что внутри todolist_text_view? Вы можете опубликовать этот xml?

Enzokie 24.09.2018 15:40
0
1
601
3

Ответы 3

Для добавления CheckBox слева от текстового представления вам необходимо добавить флажок в макете R.layout.todolist_text_view и инициализировать его так же, как вы инициализируете текстовое представление.

Ниже код для флажка:

<android.support.v7.widget.AppCompatCheckBox
            android:id = "@+id/chkboxId"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:text = "@string/some_text"
            />

Вам нужна разметка, например, с Constraint Layout, которая будет включать как TextView, так и CheckBox.

Вам нужно изменить макет todolist_text_view.xml, чтобы включить флажок.

Затем замените onCreateViewHolder следующим образом: -

 @Override
public TodolistAdapter.TodoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.todolist_text_view, parent, false);

    TodoViewHolder vh = new TodoViewHolder(v);
    return vh;
}

Теперь замените TodoViewHolder, как показано ниже: -

public static class TodoViewHolder extends RecyclerView.ViewHolder {

public TextView todoView;
public Checkbox checkbox;

public TodoViewHolder(View view) {
    super(textView);
     todoView = view.findViewById(R.id.textViewId);
     checkbox = view.findViewById(R.id.checkboxId);        
}
}

Обратитесь к этому, чтобы получить полное представление о том, как эти методы работают вместе.

Создать список с помощью RecyclerView

Другие вопросы по теме