0

Je souhaite faire glisser l'élément de la vue de recyclage et lorsque l'élément est glissé, l'élément du bas doit être déplacé vers le haut.Comment faire glisser l'élément dans la vue de recyclage lors de l'utilisation de fournisseurs de contenu

dans onCreateView de mon Fragment

new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, 
       ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { 
      @Override 
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
       return false; 
      } 

      @Override 
      public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
       //Toast.makeText(getActivity(),"ByBy",Toast.LENGTH_LONG).show(); 

       myListCursorAdapter.onItemRemove(viewHolder, recyclerView); 
      } 
     }).attachToRecyclerView(recyclerView); 

adaptateur

public class TaskCursorAdapter extends RecyclerCursorAdapter<TaskCursorAdapter.ViewHolder> { 
    Context context; 
    Cursor cursor; 


    public TaskCursorAdapter(Context context, Cursor cursor) { 
     super(context, cursor); 
     this.cursor = cursor; 
     this.context = context; 
     setHasStableIds(true); 

    } 

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public TextView taskname; 
     public TextView dateDetails; 
     Context context; 
     Cursor cursor; 

     public ViewHolder(View view, Context context, Cursor cursor) { 
      super(view); 
      this.context = context; 
      this.cursor = cursor; 
      taskname = (TextView) view.findViewById(R.id.listitemtaskname); 
      dateDetails = (TextView) view.findViewById(R.id.listitemdatedetails); 
      view.setOnClickListener(this); 
     } 


     @Override 
     public void onClick(View v) { 

      // Form the content URI that represents the specific pet that was clicked on, 
      // by appending the "id" (passed as input to this method) onto the 
      // {@link PetEntry#CONTENT_URI}. 
      // For example, the URI would be "content://com.example.android.pets/pets/2" 
      // if the pet with ID 2 was clicked on. 
      Intent intent = new Intent(context, EditorActivity.class); 
      Uri currentPetUri = ContentUris.withAppendedId(TaskContract.TaskEntry.CONTENT_URI, this.getAdapterPosition() + 1); 

      intent.setData(currentPetUri); 
      context.startActivity(intent); 


     } 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); 
     View view = layoutInflater.inflate(R.layout.list_item, parent, false); 
     return new ViewHolder(view, context, cursor); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) { 

     int taskColumnIndex = cursor.getColumnIndex(TaskContract.TaskEntry.NAME); 
     int dateColumnIndex = cursor.getColumnIndex(TaskContract.TaskEntry.DUEDATE); 
     int timeColumnIndex = cursor.getColumnIndex(TaskContract.TaskEntry.DUETIME); 

     String task = cursor.getString(taskColumnIndex); 
     String dateString = cursor.getString(dateColumnIndex); 
     String timeString = cursor.getString(timeColumnIndex); 

     viewHolder.cursor = cursor; 
     viewHolder.taskname.setText(task); 

     if (timeString == null && dateString == null) { 
      viewHolder.dateDetails.setVisibility(View.GONE); 

     } else { 
      viewHolder.dateDetails.setText(dateString + "\t\t" + timeString); 
     } 

    } 

    public void onItemRemove(final RecyclerView.ViewHolder viewHolder, final RecyclerView recyclerView) { 
     int adapterPosition = viewHolder.getAdapterPosition()+1; 
     Uri currentPetUri = ContentUris.withAppendedId(TaskContract.TaskEntry.CONTENT_URI, viewHolder.getAdapterPosition()); 


     Snackbar snackbar = Snackbar 
       .make(recyclerView, "PHOTO REMOVED", Snackbar.LENGTH_LONG) 
       .setAction("UNDO", new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         int mAdapterPosition = viewHolder.getAdapterPosition() + 1; 
         Toast.makeText(context,"Hi",Toast.LENGTH_LONG).show(); 

         recyclerView.scrollToPosition(mAdapterPosition); 

        } 
       }); 
     snackbar.show(); 
     context.getContentResolver().insert(TaskContract.TaskEntry.CONTENT_URI_FINISHED, values); 
     // Toast.makeText(context,"Hi2",Toast.LENGTH_LONG).show(); 
     //notifyItemChanged(adapterPosition); 
     recyclerView.scrollToPosition(adapterPosition); 


    } 

} 

J'ai tout essayé, mais il est difficile de glisser élément de recyclerview et quand undo du snack-bar est pressé, je veux que l'article réapparaisse. Je souhaite faire glisser l'élément de la vue de recyclage et lorsque l'élément est glissé, l'élément du bas doit être déplacé vers le haut.

Répondre

1

1) Vous devez remplacer la méthode onSwiped() comme ci-dessous.

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.DOWN | ItemTouchHelper.UP) { 

      @Override 
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
       //do something 
       return false; 
      } 

      @Override 
      public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {  
       int position = viewHolder.getAdapterPosition(); 
       arrayList.remove(position);//remove swiped item 
       adapter.notifyDataSetChanged();//notify the recyclerview changes in the dataset 

      } 
    }; 

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
itemTouchHelper.attachToRecyclerView(rv);//attach to your recyclerview 

2) N'oubliez pas d'importer v22.2. + De la bibliothèque RecyclerView. 3) Pour que l'item botom puisse être déplacé (mise à jour), vous devez faire un rafraîchissement après "adapter.notifyDataSetChanged()" d'abord mettre à jour la base de données puis extraire les nouvelles données de la base de données (avec modifications). Cela mettra à jour la base de données et aussi le recyclerview.

4) Pour annuler, vous devez conserver une pile des éléments qui ont été supprimés (ordre LIFO) et les réinsérer lorsque vous cliquez sur Annuler.

+0

S'il vous plaît vérifier ma question, j'ai déjà surmonté la méthode et je ne peux pas utiliser arraylist comme j'utilise sqlite avec le fournisseur de contenu – Cycle