如何从数据库中删除项目后从recyclerView中删除该项目

时间:2015-07-16 01:52:58

标签: android android-recyclerview dialogfragment

我正在使用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");
        }

1 个答案:

答案 0 :(得分:0)

您的代码非常复杂!

但是根据您的需要:在用户输入正确的代码后,从db和recyclerview 中删除项目。所以,基本上你可以通过一些步骤达到它:

  1. 当用户点击 - >>时,为每个recyclerview项目(或项目上的按钮)创建监听器打开一个对话框。

  2. 用户输入正确的代码后(你必须检查它是否正确)然后做两件事:

  3. - >通过适配器从recyclerview中删除视图:

    dataSource.remove(index); // remember to remove it from your adapter data source
    notifyItemRemoved(index);
    

    - >从数据库中删除数据(如何删除依赖于您)

    如果没有从您的数据库中删除数据,请调用您的删除功能,如果它被调用,如果它工作,或任何错误!

    希望有所帮助!