在我的recyclerview适配器类中实现Android底表

swa*_*oop 5 android material-design recycler-adapter android-recyclerview

我想在Recyclerview Adapter类的Onlongclick中实现android底层表,但是试图长按我的recyclerview项,使其崩溃。

     public class AddAtendanceAdapter extends      
        RecyclerView.Adapter<AddAtendanceAdapter.AttendanceViewHolder> {
        public List<Details> dAttendance = Collections.emptyList();

        private LayoutInflater inflater;
        private static Context context;

        private View v;




        public AddAtendanceAdapter(Context context, List<Details> dAttendance) {
            this.dAttendance = dAttendance;
            this.context = context;
            inflater = LayoutInflater.from(context);
        }

        @Override
        public AttendanceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.student_item_row,
    parent, false);
            AttendanceViewHolder pvh = new AttendanceViewHolder(v);
            return pvh;
        }

        @Override
        public void onBindViewHolder(AttendanceViewHolder holder, int postions) {
            Details details = dAttendance.get(postions);
            holder.StudentsName.setText(details.getStudentName());
            Glide.with(context)
                    .load(details.getStudentImage())
                    .into(holder.stdImg);

        }

        @Override
        public int getItemCount() {
            if (dAttendance != null) {
                return dAttendance.size();
            }
            return 0;
        }


        @Override
        public void onAttachedToRecyclerView(RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
        }

        public static class AttendanceViewHolder extends RecyclerView.ViewHolder {



            TextView StudentsName;
            CircleImageView stdImg;
            private  Activity activity;
            AttendanceViewHolder(View itemView) {
                super(itemView);
                StudentsName = (TextView) itemView.findViewById(R.id.txtStdName);
                stdImg = (CircleImageView) itemView.findViewById(R.id.stdImg);
                itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        Log.d("juu","hhh");
                        openBottomSheet(v);

                        return false;
                    }
                });


            }
            private  void openBottomSheet(View v) {
           //View view = activity.getLayoutInflater ().inflate (R.layout.bottom_sheet, null);
               // View view = inflater.inflate( R.layout.bottom_sheet, null );

                LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            View view = inflater.inflate (R.layout.bottom_sheet, null);
                TextView txtBackup = (TextView)view.findViewById(R.id.txt_backup);
                TextView txtDetail = (TextView)view.findViewById(R.id.txt_detail);
                TextView txtOpen = (TextView)view.findViewById(R.id.txt_open);
                final TextView txtUninstall = (TextView)view.findViewById( R.id.txt_uninstall);

                final Dialog mBottomSheetDialog = new Dialog (context, R.style.MaterialDialogSheet);
                mBottomSheetDialog.setContentView (view);
                mBottomSheetDialog.setCancelable (true);
                mBottomSheetDialog.getWindow ().setLayout (LinearLayout.LayoutParams.MATCH_PARENT,
    LinearLayout.LayoutParams.WRAP_CONTENT);
                mBottomSheetDialog.getWindow ().setGravity (Gravity.BOTTOM);
                mBottomSheetDialog.show ();


                txtBackup.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context,"Clicked Backup",Toast.LENGTH_SHORT).show();
                        mBottomSheetDialog.dismiss();
                    }
                });

                txtDetail.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context,"Clicked Detail",Toast.LENGTH_SHORT).show();
                        mBottomSheetDialog.dismiss();
                    }
                });

                txtOpen.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context,"Clicked Open",Toast.LENGTH_SHORT).show();
                        mBottomSheetDialog.dismiss();
                    }
                });

                txtUninstall.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context,"Clicked Uninstall",Toast.LENGTH_SHORT).show();
                        mBottomSheetDialog.dismiss();
                    }
                });
            }

        }

}
Run Code Online (Sandbox Code Playgroud)

我的原木猫是

android.view.WindowManager $ BadTokenException:无法添加窗口-令牌null不适用于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310上android.view.ViewRootImpl.setView(ViewRootImpl.java:583)的应用),位于in.edsys.teacherapp.adapters.AddAtendanceAdapter $ AttendanceViewHolder处的android.app.Dialog.show(Dialog.java:319)处的android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)处。位于in.edsys.teacherapp.adapters.AddAtendanceAdapter $ AttendanceViewHolder.access $ 000(AddAtendanceAdapter.java:80)处的openBottomSheet(AddAtendanceAdapter.java:119)位于in.edsys.teacherapp.adapters.AddAtendanceAdapter $ AttendanceViewHolder $ 1.onLongClick(Add。 95)

Bra*_*ani 11

您可以在适配器类中使用“ 底部对话框”对话框或“ 底部对话框对话框”片段来显示底部表单

BottomSheetDialog示例

 View view = ((FragmentActivity)context).getLayoutInflater().inflate(R.layout.fragment_bottom_sheet, null);
                BottomSheetDialog dialog = new BottomSheetDialog(mContext);
                dialog.setContentView(view);
                dialog.show();
Run Code Online (Sandbox Code Playgroud)

而且您也可以使用BottomsheetDialogFragment

BottomsheetDialogFragment示例

对话类

public class BottomsheetDialog extends BottomSheetDialogFragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup       container, @Nullable Bundle savedInstanceState) {
    View v=inflater.inflate(R.layout.fragment_bottom_sheet,container,false);
    return v;
}
}
Run Code Online (Sandbox Code Playgroud)

像这样在您的适配器类中调用BottomsheetDialog

BottomSheetDialogFragment bottomSheetDialogFragment = new BottomsheetDialog();               
bottomSheetDialogFragment.show(((FragmentActivity)mContext).getSupportFragmentManager(), bottomSheetDialogFragment.getTag());
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请检查以下链接

链接1

链接2


小智 3

private  void openBottomSheet(View v) {
                //View view = activity.getLayoutInflater ().inflate (R.layout.bottom_sheet, null);
                // View view = inflater.inflate( R.layout.bottom_sheet, null );
                Context context=v.getContext();
                LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
                View view = inflater.inflate (R.layout.bottom_sheet, null);
                TextView txtBackup = (TextView)view.findViewById(R.id.txt_backup);
                TextView txtDetail = (TextView)view.findViewById(R.id.txt_detail);
                TextView txtOpen = (TextView)view.findViewById(R.id.txt_open);
                final TextView txtUninstall = (TextView)view.findViewById( R.id.txt_backup);

            final Dialog mBottomSheetDialog = new Dialog (context, R.style.MaterialDialogSheet);
            mBottomSheetDialog.setContentView (view);
            mBottomSheetDialog.setCancelable (true);
            mBottomSheetDialog.getWindow ().setLayout (LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            mBottomSheetDialog.getWindow ().setGravity (Gravity.BOTTOM);
            mBottomSheetDialog.show ();


            txtBackup.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            Toast.makeText(v.getContext(),"Clicked Backup",Toast.LENGTH_SHORT).show();
                            mBottomSheetDialog.dismiss();
                    }
            });

            txtDetail.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            Toast.makeText(v.getContext(),"Clicked Detail",Toast.LENGTH_SHORT).show();
                            mBottomSheetDialog.dismiss();
                    }
            });

            txtOpen.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            Toast.makeText(v.getContext(),"Clicked Open",Toast.LENGTH_SHORT).show();
                            mBottomSheetDialog.dismiss();
                    }
            });

            txtUninstall.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            Toast.makeText(v.getContext(),"Clicked Uninstall",Toast.LENGTH_SHORT).show();
                            mBottomSheetDialog.dismiss();
                    }
            });
    }
Run Code Online (Sandbox Code Playgroud)

使用它对我有用的代码对 xml 文件进行小的更改