我正在使用recyclerView显示当用户点击每个项目的删除按钮时可以删除的项目列表。为了做到这一点,我使用了recyclerview适配器。
我想要的是什么:从该recycleView适配器,当用户点击某个项目的删除按钮时,会显示一个对话框片段,当该代码有效时,用户必须输入代码,然后该项目为从数据库和recyclerView中删除
我尝试了什么:在适配器的dialogFragment上调用show()方法之后,我正在调用removeItem(getPostion())。
得到的结果:当对话框出现时,在用户输入代码但仍在数据库中之前,该项目将从recyclerView中删除 我尝试了其他的东西,但没有一个工作。
请帮忙!!! RecyclerView适配器(EBAdapter)
{% if file_exists %}
do stuff
{% endif %}
DialogFragment(DiscardEmergencyPers)
public EBViewHolder(View itemView) {
super(itemView);
contact_row = (LinearLayout) itemView.findViewById(R.id.contact_row);
contact_row.setOnClickListener(this);
contact_photo = (ImageView) itemView.findViewById(R.id.contact_photo);
contact_photo.setOnClickListener(this);
contact_fullname = (TextView) itemView.findViewById(R.id.contact_fullname);
contact_relationship = (TextView) itemView.findViewById(R.id.contact_relationship);
contact_action = (ImageView) itemView.findViewById(R.id.contact_action);
contact_action.setOnClickListener(this);
contact_discard = (ImageView) itemView.findViewById(R.id.discard_action);
contact_discard.setOnClickListener(this);
}
@Override
public void onClick(View view){
//Handling recyclerView action clicked
String status;
if(view instanceof ImageView) {
if (view == contact_photo) {
Log.d("Contact", contact_photo.getId() + "photo " + getPosition() + "clicked");
ShowContactPhoto dialog = new ShowContactPhoto();
dialog.setStyle(DialogFragment.STYLE_NO_TITLE,0);
dialog.show(manager, "ScP_dialog");
}
if (view == contact_action) {
Log.d("Contact", contact_fullname.getText() + "action " + getPosition() + "clicked");
status = "active";
Date created_at = new Date();
Date updated_at = new Date();
AddInEmergencyBase dialog = new AddInEmergencyBase(((BitmapDrawable)contact_photo.getDrawable()).getBitmap(), contact_fullname.getText().toString(),contact_relationship.getText().toString(),status,created_at.toString(),updated_at.toString());
dialog.show(manager, "AiB_dialog");
Log.d("Contact", "Dialog Dismissed now");
}
//REGION OF INTEREST:
if (view == contact_discard) {
Log.d("Contact", contact_discard.getId() + "photo " + getPosition() + "clicked");
status = "inactive";
dialog = new DiscardEmergencyPers(contact_fullname.getText().toString(),status,mModels,getPosition(),rc);
position = getPosition();
dialog.show(manager, "DeP_dialog");
//dialog.getDialog().setOnDismissListener(this);
//onDismiss(dialog);
removeItem(getPosition());
Log.d("Contact", dialog.getDialog()+"item removed from data actually updated so hihihi....");
/*ShowContactPhoto dialog = new ShowContactPhoto();
dialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
dialog.show(manager, "ScP_dialog");*/
}
}
else{
Log.d("Contact", contact_row.getId() + "row " + getPosition() + "clicked");
}
答案 0 :(得分:0)
您的代码非常复杂!
但是根据您的需要:在用户输入正确的代码后,从db和recyclerview 中删除项目。所以,基本上你可以通过一些步骤达到它:
当用户点击 - >>时,为每个recyclerview项目(或项目上的按钮)创建监听器打开一个对话框。
用户输入正确的代码后(你必须检查它是否正确)然后做两件事:
- >通过适配器从recyclerview中删除视图:
dataSource.remove(index); // remember to remove it from your adapter data source
notifyItemRemoved(index);
- >从数据库中删除数据(如何删除依赖于您)
如果没有从您的数据库中删除数据,请调用您的删除功能,如果它被调用,如果它工作,或任何错误!
希望有所帮助!