0

我想從recyclerview中滑動項目,並且在滑動項目時底部項目應向上移動。如何在使用內容提供者時在recyclerview中滑動項目

在onCreateView我的片段

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); 

的適配器

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); 


    } 

} 

我什麼都試過,但它很難從recyclerview刷卡項目,當按下小吃吧的撤銷我希望該項目重新出現。我想從recyclerview中滑動物品,當物品被滑動時,底部物品應該向上移動。

回答

1

1)您需要覆蓋方法onSwiped(),如下所示。

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)不要忘記導入RecyclerView庫的v22.2。+。 3)對於botom項目向上移動(更新),您需要在「adapter.notifyDataSetChanged()」首次更新數據庫之後執行刷新,然後從數據庫中提取新數據(包含更改)。這將更新數據庫以及recyclerview。

4)要撤消,您需要保留一堆被刪除的元素(LIFO順序),並在您單擊撤消時將其插回。

+0

請檢查我的問題,我已經覆蓋了該方法,我不能使用arraylist,因爲我使用內容提供商的sqlite – Cycle

相關問題