4

Я хочу реализовать нижний лист Android в Onlongclick моего класса Recyclerview Adapter, но я пытаюсь нажать длинный щелчок на элементе recyclerview, который его разбил.Внесите нижний лист 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(); 
        } 
       }); 
      } 

     } 

} 

мой журнал кот

android.view.WindowManager $ BadTokenException: Невозможно добавить окно - маркер нуль не для приложения в android.view.ViewRootImpl.setView (ViewRootImpl.java:583) на android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:310) на android.view.WindowManagerImpl.addView (WindowManagerImpl.java:85) на android.app. Dialog.show (Dialog.java:319) в in.edsys.teacherapp.adapters.AddAtendanceAdapter $ AttendanceViewHolder.openBottomSheet (AddAtendanceAdapter.java:119) в in.edsys.teacherapp.adapters.AddAtendanceAdapter $ AttendanceViewHolder.access $ 000 (AddAtendanceAdapter .java: 80) в in.edsys.teacherapp.adapters.AddAtendanceAdapter $ AttendanceViewHolder $ 1.onLongClick (AddAtendanceAdapter.java:95)

+0

обеспечивает адаптеры onlong пресс-код, кажется, вы используете плохое окно tok ru, означает, что вы пытаетесь показать что-то с контекстом, который больше не существует. –

+0

Можете ли вы дать мне образец кода для этого? – swaroop

+0

Посмотрите на следующую ссылку в блоге разработчика Android, http://android-developers.blogspot.in/2016/02/android-support-library-232.html –

ответ

0
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(); 
        } 
      }); 
    } 

Используйте код он работал для меня, делая небольшие изменения в XML-файл

1

Использование снизу Лист Диалог или нижний лист Диалог Фрагмент для отображения нижнего листа в адаптер класса

Использование BottomSheetDialog для отображения Bottomsheet

Пример кода

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

А также вы можете использовать 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; 
} 
} 

Просто позвоните BottomsheetDialog в своем классе адаптера Как это

BottomSheetDialogFragment bottomSheetDialogFragment = new BottomsheetDialog(); 
       bottomSheetDialogFragment.show(((FragmentActivity)mContext).getSupportFragmentManager(), bottomSheetDialogFragment.getTag()); 

Дополнительной информации Проверки ссылок ниже

Link1

Link2