Android ViewGroup для ViewHolder - PullRequest
       45

Android ViewGroup для ViewHolder

0 голосов
/ 24 сентября 2018

Я создаю простое приложение 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.Теперь я хочу добавить флажок слева от TextViews, чтобы отметить / снять галочку с одной задачи.

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

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

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

0 голосов
/ 24 сентября 2018

Вам необходимо изменить макет 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

0 голосов
/ 24 сентября 2018

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

Ниже код для галочки:

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