如何通过onClick将用户数据添加到我的Recyclerview?

时间:2017-08-26 17:15:00

标签: android android-recyclerview

我正在尝试使用带有自定义适配器的RecyclerView构建一个简单的待办事项列表应用。我已经构建了一个模型数据类来获取和设置我的待办事项。我的问题是,每次我点击按钮添加我的项目,没有任何反应。我确实调用了notifyDataSetChanged()方法,但它仍然不起作用。

这是我正在构建的练习应用程序,用于学习RecyclerViews和自定义适配器,所以如果有人可以解释为什么它不起作用我可能会感激,并且可能向我解释如何解决它。

这是我的代码,我从EditText字段中检索用户输入并将其放入我的数据中:

    public class MainActivity extends AppCompatActivity {

        private ToDoData toDoData;

        private List<ToDoData> toDoList = new ArrayList<>();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            final ToDoAdapter toDoAdapter = new ToDoAdapter(toDoList, this);
            toDoData = new ToDoData(this);

            final EditText toDoInput = (EditText)findViewById(R.id.add_todo);
            Button toDoAdd = (Button)findViewById(R.id.add_item);

            RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
            RecyclerView toDoDisplay = (RecyclerView) findViewById(R.id.toDoDisplayRecyclerView);
            toDoDisplay.setAdapter(toDoAdapter);
            toDoDisplay.setHasFixedSize(true);
            toDoDisplay.setLayoutManager(layoutManager);


            toDoAdd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    toDoData.setToDo(toDoInput.getText().toString());
                    toDoAdapter.notifyDataSetChanged();
                }
            });

        }
    }

这是我的getter和setter模型类。 list-item只有1个字段,所以它相当小:

public class ToDoData {
    private String toDoString;

    public ToDoData(String todoString){
        this.toDoString = todoString;
    }

    public ToDoData(Context context){}

    public String getToDo() {
        return toDoString;
    }

    public void setToDo(String toDoString) {
        this.toDoString = toDoString;
    }
}

这是我的自定义适配器。我在构建这个时遵循了一个教程,但我认为我的问题源于适配器:

public class ToDoAdapter extends RecyclerView.Adapter<ToDoAdapter.ViewHolder> {

    private List<ToDoData> toDoList;
    private Context context;

    public ToDoAdapter(List<ToDoData> todoList, Context context) {
        this.toDoList = todoList;
        this.context = context;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView todoView;

        public ViewHolder(View itemView) {
            super(itemView);
            todoView = (TextView) itemView.findViewById(R.id.to_do_display);
        }
    }

    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.to_do_list_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ToDoData todo = toDoList.get(position);

        holder.todoView.setText(todo.getToDo());
    }

    @Override
    public int getItemCount() {
        return (toDoList == null) ? 0 : toDoList.size();
    }
}

1 个答案:

答案 0 :(得分:2)

在适配器类中添加一个setter方法来设置集合,然后调用notifyDataSetChanged

ToDoAdapter声明为类成员,然后在Button点击上调用setter函数,如下所示,

adapter.setTodoList(/* pass collection */);
adapter.notifyDataSetchanged();