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