android - 如何从 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);
}
}
}
解决方案
看起来您的活动正在扩展AppCompatActivity
并且您AppointmentBookingDialogFragment
是android.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");
推荐阅读
- android - 使用 JUnit 5 进行 ViewModel UI 测试
- python - 从黄砖 KElbowVisualizer 中提取 k
- javascript - 使用带有asp.net mvc的cropper js没有在文本框中获取选定的照片名称
- unity3d - Unity web gl游戏不会显示加载屏幕,只是黑屏
- python - 如何遍历n维列表并找到所有组合
- c# - 如果我不在 WinForms 上使用 Thread.Sleep,BackgroundWorker 将不起作用
- ffmpeg - 将 MOV 转换为 WEBM,带 alpha 通道,不损失质量
- javascript - 如何在 iOS Safari 中触发横向全屏?
- python - 尝试将元素从文本文件导入列表
- python - Pandas 在 case when 语句后无法选择 NaN 行