java - 如果我在 recyclerview 中添加 n 个数据,它只显示 n-1 个数据。当我添加第 n+1 个数据时,它显示第 n 个数据
问题描述
我正在制作一个待办事项应用程序,其中我使用了一个 fab,单击它会打开一个包含编辑文本的对话框。当用户输入数据时,我使用 addnewdata() 方法将其动态地放入 recyclerview 中。问题是当用户输入数据时,以前输入的数据显示在列表中,如果我添加 n 个项目,它只显示 n-1 个列表。在这种情况下我该怎么办?
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewholder> {
Context context;
String EnterTitle, EnterDesc;
private List<Todo> todolist;
public CustomAdapter(List<Todo> todolist) {
this.todolist = todolist;
}
@NonNull
@Override
public MyViewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.tasktheme, parent, false);
return new MyViewholder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewholder holder, int position) {
Todo todo = todolist.get(position);
holder.titletext.setText(todo.getTitle());
holder.desctext.setText(todo.getDescription());
}
@Override
public int getItemCount() {
System.out.println("The size of the recycler view adapter is ====================================" + todolist.size());
return todolist.size();
}
public class MyViewholder extends RecyclerView.ViewHolder {
public TextView titletext, desctext;
public MyViewholder(@NonNull View itemView) {
super(itemView);
titletext = itemView.findViewById(R.id.tv_title);
desctext = itemView.findViewById(R.id.tv_desc);
}
}
}
这是我的主要活动
public class MainActivity extends AppCompatActivity implements AddTaskDialog.DialogListner {
private RecyclerView recyclerView;
private List<Todo> todolist = new ArrayList<>();
private CustomAdapter customAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
customAdapter = new CustomAdapter(todolist);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(customAdapter);
FloatingActionButton fab=findViewById(R.id.fab1);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"Floating Action Button",Toast.LENGTH_SHORT).show();
openDialog();
}
});
addNewData("1 ", "Bhojani");
addNewData("2 ", "Bhojani");
addNewData("3 ", "Bhojani");
addNewData("4 ", "Bhojani");
addNewData("5 ", "Bhojani");
addNewData("6 ", "Bhojani");
addNewData("7 ", "Bhojani");
addNewData("8 ", "Bhojani");
}
private void openDialog() {
AddTaskDialog addDialog = new AddTaskDialog();
addDialog.show(getSupportFragmentManager(),"example dialog");
}
private void addNewData(String Title, String Description) {
Todo todo = new Todo(Title,Description);
todolist.add(todo);
customAdapter.notifyDataSetChanged();
}
@Override
public void addListItem(String data_title, String data_Description) {
addNewData(data_title,data_Description);
}
}
**This is my dialog classs**
public class AddTaskDialog extends AppCompatDialogFragment {
private EditText Title,Description;
private DialogListner listner;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
listner=(DialogListner) context;
}
catch (ClassCastException ex){
throw new ClassCastException(context.toString()+"must implement ExamplDialogListner");
}
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
LayoutInflater inflater=getActivity().getLayoutInflater();
View view= inflater.inflate(R.layout.layout_dialougr,null);
Title= view.findViewById(R.id.et_title);
Description=view.findViewById(R.id.et_description);
builder.setView(view)
.setTitle("New Task")
.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String data_title=Title.getText().toString();
String data_description =Description.getText().toString();
listner.addListItem(data_title,data_description);
}
});
return builder.create();
}
public interface DialogListner{
void addListItem(String data_title,String data_Description);
}
}
解决方案
您应该在适配器中创建一个函数
fun submitList(itemList: List<Item>) {
list = itemList
}
此处的列表是在回收器视图顶部声明的项目列表。现在从 main 调用适配器的此函数并将列表传递到那里
推荐阅读
- android - 使用 Kotlin 在按钮单击时移动到新 Activity,不传递任何信息,代码尽可能简单
- javascript - 进度条项目的“样式”未定义未捕获类型错误
- java - 限制对 java、c++、python 程序的权限
- ios - iOS SwiftUI 函数返回一些未显示在 UI 中的视图
- quarkus - 如何为 GraphQL 请求定义 HTTP 过滤器?
- r - 评估 R 中的二项式多项式表达式
- mysql - 使用 UUID_Short 更改字段失败?
- javascript - 如何正确存储相互引用的对象?(圆形结构)
- pytorch - 如何用两个或更多输入训练 Pytorch CNN
- html - 如何使标题在手机上保持粘性?