首页 > 解决方案 > 如果我在 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);

    }
}

标签: javaandroidandroid-recyclerview

解决方案


您应该在适配器中创建一个函数

fun submitList(itemList: List<Item>) {
    list = itemList
}

此处的列表是在回收器视图顶部声明的项目列表。现在从 main 调用适配器的此函数并将列表传递到那里


推荐阅读