Android 我应该如何编码以在日记表中获得正确的日记ID?;

Android 我应该如何编码以在日记表中获得正确的日记ID?;,android,android-room,Android,Android Room,我想知道当长按任何RecyclerView项时会弹出对话框Fragment函数。DialogFragment将用于编辑日记,因此我应该找到日记ID。在开始时,我从RecyclerView位置找到ID,因为项目ID仅与日记ID的值相差一倍。但是当我长按项目时,程序在删除任何日记后崩溃,因为ID错误 例如,现在这里有2个日记,日记表中的日记id为1,2,在RecyclerView中的位置为0,1。如果删除第一本日记,则第二本日记在RecyclerView中的位置为0 在开始时,我对这些代码进行了编码

我想知道当长按任何RecyclerView项时会弹出对话框Fragment函数。DialogFragment将用于编辑日记,因此我应该找到日记ID。在开始时,我从RecyclerView位置找到ID,因为项目ID仅与日记ID的值相差一倍。但是当我长按项目时,程序在删除任何日记后崩溃,因为ID错误 例如,现在这里有2个日记,日记表中的日记id为1,2,在RecyclerView中的位置为0,1。如果删除第一本日记,则第二本日记在RecyclerView中的位置为0

在开始时,我对这些代码进行了编码,以实现与图像类似的功能:

RecyclerView rv_diary = view.findViewById(R.id.rv_diary_write_view);
        final DiaryListAdapter adapter_diary = new DiaryListAdapter(new DiaryListAdapter.DiaryDiff(), new DiaryListAdapter.OnItemLongClickListener() {
            @Override
            public void onLongClick(int pos) {
                Position = pos+1;
                mDiaryViewModel = new ViewModelProvider(activity).get(DiaryViewModel.class);
                mDiaryViewModel.getSpecificDiary(pos+1).observe(activity, diary -> {
                    Bundle result = new Bundle();
                    result.putInt("bundle_specific_nu", pos+1);
                    result.putString("bundle_specific_title", String.valueOf(diary.getDiary_Title()));
                    result.putString("bundle_specific_content", String.valueOf(diary.getDiary_Content()));
                    getParentFragmentManager().setFragmentResult("requestSpecificDiary",result);
                });
                DWUpdDiaFragment dwUpdDiaFragment = new DWUpdDiaFragment();
                dwUpdDiaFragment.show(activity.getSupportFragmentManager(),"dwUpdDiaFragment");
            }
        });
        rv_diary.setAdapter(adapter_diary);
        rv_diary.setLayoutManager(new LinearLayoutManager(activity));
        mDiaryViewModel = new ViewModelProvider(activity).get(DiaryViewModel.class);
        mDiaryViewModel.getAllDiariesLive().observe(activity, diaries -> {
            adapter_diary.submitList(diaries);
        });
然后我会在DWUpdDiaFragment中得到日记标题和目录内容/

public class DWUpdDiaFragment extends DialogFragment {

    TextView tv_view_nu;
    EditText et_view_title,et_view_content;
    FloatingActionButton fab_update,fab_back;

    String get_title,get_content;
    int get_nu;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.fg_diary_write_view_and_update, null);
        builder.setView(view);
        tv_view_nu = view.findViewById(R.id.tv_diary_write_view_and_update_nu);
        et_view_title = view.findViewById(R.id.et_diary_write_view_and_update_title);
        et_view_content = view.findViewById(R.id.et_diary_write_view_and_update_content);
        fab_back = view.findViewById(R.id.fab_fg_diary_write_and_update_back);
        fab_update = view.findViewById(R.id.fab_fg_diary_write_and_update_find_out);

        getParentFragmentManager().setFragmentResultListener("requestSpecificDiary", this, new FragmentResultListener() {

            @Override
            public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
                get_nu = result.getInt("bundle_specific_nu");
                get_title = result.getString("bundle_specific_title");
                get_content = result.getString("bundle_specific_content");
                Log.d("test",get_title + get_content);
                tv_view_nu.setText("Diary " + get_nu + " Edit Page");
                et_view_title.setText(get_title);
                et_view_content.setText(get_content);
            }
        });

        fab_update.setOnClickListener(update -> {
            Bundle result = new Bundle();
            result.putString("bundle_update_title", String.valueOf(et_view_title.getText()));
            result.putString("bundle_update_content", String.valueOf(et_view_content.getText()));
            Log.d("test","\nready been sent" + et_view_title.getText() + et_view_content.getText());
            getParentFragmentManager().setFragmentResult("updateSpecificDiary", result);
            dismiss();
        });

        fab_back.setOnClickListener(back -> {
            dismiss();
        });

        return  builder.create();
    }
}
显然,通过SSS代码查找日记ID不是一个好的解决方案。作为初学者,我接下来应该编写什么代码?谢谢


我认为问题出在您的
DiaryViewModel
类中,只需添加一个名为
id
的属性并将其设置为diary\u id即可