Я создаю простое приложение 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.
Для добавления 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);
}
}
Обратитесь к этому, чтобы получить полное представление о том, как эти методы работают вместе.
Кстати, что внутри
todolist_text_view? Вы можете опубликовать этот xml?