2017-07-11 3 views
0

J'ai un RecyclerView intérieur SwipeRefreshLayoutRecyclerView intérieur SwipeRefreshLayout avec gauche/Swipes droit de changer la vue

<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/refresh" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/workout_list_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</android.support.v4.widget.SwipeRefreshLayout> 

Dans mon activité

refresh.setColorSchemeColors(getResources().getColor(R.color.buttonNormal)); 
    refresh.setProgressViewOffset(true, 80, 150); 
    refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      loadWorkoutList(); 
     } 
    }); 

    rvActivities.setHasFixedSize(true); 
    rvActivities.setItemAnimator(new DefaultItemAnimator()); 
    rvActivities.setAdapter(mAdapter); 
    rvActivities.setLayoutManager(mLayoutManager); 

Comment faire fonctionner swipes gauche/droite sur mon RecyclerView appeler loadWorkoutList(); méthode?
J'ai essayé d'implémenter OnGestureDetector pour capturer les événements tactiles, mais SwipteRefreshLayout l'empêche.

public class Activity implement OnGesuteDetector { 

@Override 
public void onCreate(Bundle bundle) { 
    GestureDetector gestureDetector = new GestureDetector(this, this); 

    // my code 
} 

@Override 
public boolean onDown(MotionEvent e) { 
    return false; 
} 

@Override 
public void onShowPress(MotionEvent e) { 

} 

@Override 
public boolean onSingleTapUp(MotionEvent e) { 
    return false; 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    return false; 
} 

@Override 
public void onLongPress(MotionEvent e) { 

} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    // swipe left 
    if (e1.getX() - e2.getX() > 50) { 
     calendar.onDayClick(selectedDate.plusDays(1)); 

     return false; 
    } 

    // swipe right 
    if (e2.getX() - e1.getX() > 50) { 
     calendar.onDayClick(selectedDate.minusDays(1)); 

     return false; 
    } 

    return false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return gestureDetector.onTouchEvent(event); 
} 
} 
+0

essayer cette bibliothèque https://github.com/ chthai64/SwipeRevealLayout – akhilesh0707

Répondre

1

vous pouvez utiliser ItemTouchHelper pour fournir à glisser recyclerview regarder le code ci-dessous et me demander dans le cas d'une requête

//in On Create Method 
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = 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 swipeDir) 
      { 
       String str = movie_Name.get(viewHolder.getAdapterPosition()); 

       movie_Name.remove(viewHolder.getAdapterPosition()); 
       movie_Type.remove(viewHolder.getAdapterPosition()); 
       color_Array.remove(viewHolder.getAdapterPosition()); 
       image_Array.remove(viewHolder.getAdapterPosition()); 


       myDatabase = openOrCreateDatabase("movie", MODE_PRIVATE, null); 
       myDatabase.execSQL("DELETE FROM movie WHERE name='" + str + "';"); 


       adapter.notifyItemRemoved(viewHolder.getAdapterPosition()); 

       adapter.notifyItemRangeChanged(viewHolder.getAdapterPosition(), movie_Name.size()); 
       adapter.notifyItemRangeChanged(viewHolder.getAdapterPosition(), movie_Type.size()); 
       adapter.notifyItemRangeChanged(viewHolder.getAdapterPosition(), image_Array.size()); 
       adapter.notifyItemRangeChanged(viewHolder.getAdapterPosition(), color_Array.size()); 

      } 
     }; 
     ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
     itemTouchHelper.attachToRecyclerView(recyclerView); 
+0

Merci, tout fonctionne bien comme prévu, mais comment désactiver l'animation des éléments recyclerview? Je n'ai pas besoin de l'animation de l'action de balayage. – RexHunt

+0

@RexHunt suivez ce lien https://stackoverflow.com/questions/31418905/recyclerview-itemtouchhelper-swipe-remove-animation –

+0

pouvez-vous me dire, où je devrais coller la méthode onDraw du lien ci-dessus? – RexHunt