我正在尝试使用带有自定义适配器的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();
}
}
答案 0 :(得分:2)
在适配器类中添加一个setter方法来设置集合,然后调用notifyDataSetChanged
。
将ToDoAdapter
声明为类成员,然后在Button
点击上调用setter函数,如下所示,
adapter.setTodoList(/* pass collection */);
adapter.notifyDataSetchanged();