Ich versuche, eine einfache Aufgabenliste App mit einem RecyclerView mit einem benutzerdefinierten Adapter zu erstellen. Ich habe eine Modelldatenklasse erstellt, um meine Todos zu erhalten und zu setzen. Mein Problem ist, dass jedes Mal, wenn ich auf die Schaltfläche klicke, um meinen Artikel hinzuzufügen, nichts passiert. Ich habe notifyDataSetChanged()
Methode aufgerufen, aber es funktioniert immer noch nicht.Wie kann ich Benutzerdaten über OnClick zu meinem Recyclerview hinzufügen?
Dies ist eine Praxis-App, die ich RecyclerViews und benutzerdefinierte Adapter zu bauen, so würde ich es schätzen, wenn jemand erklären könnte, warum es nicht funktioniert und mir vielleicht erklären, wie ich es beheben kann.
Dies ist mein Code, wo ich die Benutzereingabe von dem EditText Feld bin abgerufen und in meinen Daten Abdrucken:
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();
}
});
}
}
Das ist meine Modellklasse mit Getter und Setter. Das Listenelement hat nur 1 Feld, also ist es eher klein:
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;
}
}
Und das ist mein benutzerdefinierter Adapter. Ich folgte ein Tutorial durch, während das Gebäude, aber ich glaube aber, dass mein Problem aus dem Adapter stammt:
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();
}
}
wie füge u Daten zu 'toDoList'? und wo rufst du 'notifyDataSetChanged()' auf dem Adapter an? Aus Ihrem Code haben Sie eine leere 'toDoList' an den Adapter übergeben! –
@AtefHares Sorry Korrektur * Ich habe 'notifyDataSetChanged' in meinem Button onClick aufgerufen, aber es hat nicht funktioniert. –
Ihre 'toDoList' ist leer es hat keine Elemente, weil Sie' toDoList.add (toDoData) 'nicht verwendet haben und somit die' notifyDataSetChanged() 'keine Auswirkung hat! –