首页 > 解决方案 > 如何从 Recyclerview Adapter 实现对话框片段?

问题描述

这里无法解决方法显示。如何修复它。我想DialogFragmnent从循环视图中调用。如何从Recyclerview适配器解决此显示方法。我想在单击回收视图的项目列表期间调用此对话框片段。这怎么可能?

public class AppointmentServiceListAdapter extends RecyclerView.Adapter<AppointmentServiceListAdapter.ViewHolder>
    {

        Context mContext;
        SessionManager mSessionManager;
        ArrayList<AppointServiceList> appointArrayList;
        ArrayList<AppointServiceDetails> appointservicedetailsArrayList;
        AppointmentServiceDetailsAdapter appointmentServiceDetailsAdapter;

        public AppointmentServiceListAdapter(Context mContext,ArrayList<AppointServiceList> appointArrayList,ArrayList<AppointServiceDetails> appointservicedetailsArrayList)
        {
            this.mContext = mContext;
            this.appointArrayList = appointArrayList;
            mSessionManager= new SessionManager(mContext);
            this.appointservicedetailsArrayList = appointservicedetailsArrayList;
            appointmentServiceDetailsAdapter = new AppointmentServiceDetailsAdapter(mContext,appointservicedetailsArrayList);
        }

        @NonNull
        @Override
        public AppointmentServiceListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
        {
            LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view               = inflater.inflate(R.layout.item_my_appointmentlist,parent,false);
            AppointmentServiceListAdapter.ViewHolder viewHolder = new AppointmentServiceListAdapter.ViewHolder(view);
            return viewHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, final int position)
        {
                holder.bookingDate.setText(appointArrayList.get(position).getDate());
                holder.bookingEmp.setText(appointArrayList.get(position).getEmpName());
                holder.bookingSlot.setText(appointArrayList.get(position).getSlot());
                holder.rv_appoint_servicelist.setLayoutManager(new LinearLayoutManager(mContext));
                holder.rv_appoint_servicelist.setAdapter(appointmentServiceDetailsAdapter);
                holder.lin_intent.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        FragmentManager mfFragmentManager = ((Activity)mContext).getFragmentManager();
                        AppointmentBookingDialogFragment appointmentBookingDialogFragment = new AppointmentBookingDialogFragment(mContext,position);
                        appointmentBookingDialogFragment.show(mfFragmentManager,"appointmentdialog");
                    }
                });



                appointmentServiceDetailsAdapter.notifyDataSetChanged();

        }

        @Override
        public int getItemCount()
        {
            return appointArrayList.size();
        }

        public class ViewHolder extends RecyclerView.ViewHolder
        {
            TextView bookingDate,bookingSlot,bookingEmp;
            RecyclerView rv_appoint_servicelist;
            LinearLayout lin_intent;

            public ViewHolder(View itemView)
            {
                super(itemView);
                bookingDate            = (TextView)itemView.findViewById(R.id.bookingDate);
                bookingSlot            = (TextView)itemView.findViewById(R.id.bookingSlot );
                bookingEmp             = (TextView)itemView.findViewById(R.id.bookingEmp);
                rv_appoint_servicelist = (RecyclerView)itemView.findViewById(R.id.rv_appoint_servicelist);
                lin_intent             = (LinearLayout)itemView.findViewById(R.id.lin_intent);
            }
        }
    }

标签: androidandroid-recyclerviewandroid-dialogfragment

解决方案


看起来您的活动正在扩展AppCompatActivity并且您AppointmentBookingDialogFragmentandroid.support.v4.app.DialogFragment

将此代码替换为以下代码,FragmentManager mfFragmentManager = ((Activity)mContext).getFragmentManager();并确保您的适配器具有正确import android.support.v4.app.FragmentManager的导入而不是导入android.app.FragmentManager

FragmentManager mfFragmentManager = ((AppCompatActivity)mContext).getSupportFragmentManager();

供您参考已修改您的代码,如下所示

android.support.v4.app.FragmentManager mfFragmentManager = ((AppCompatActivity)mContext).getSupportFragmentManager();
AppointmentBookingDialogFragment appointmentBookingDialogFragment = new AppointmentBookingDialogFragment(mContext,position);
appointmentBookingDialogFragment.show(mfFragmentManager,"appointmentdialog");

推荐阅读