Saya menggunakan recyclerview 22.2.0 dan kelas pembantu ItemTouchHelper.SimpleCallback untuk mengaktifkan opsi geser-untuk-menutup ke daftar saya. Tetapi karena saya memiliki jenis tajuk di atasnya, saya perlu menonaktifkan perilaku gesek untuk posisi pertama adaptor. Karena RecyclerView.Adapter tidak memiliki metode isEnabled () , saya mencoba menonaktifkan interaksi tampilan melalui metode isEnabled () dan isFocusable () dalam pembuatan ViewHolder itu sendiri, tetapi tidak berhasil. Saya mencoba menyesuaikan ambang geser ke nilai penuh, seperti 0f ot 1f dalam metode getSwipeThreshold () pada metode SimpleCallback , tetapi tidak berhasil juga.
Beberapa potongan kode saya untuk membantu Anda membantu saya.
Aktivitas Saya:
@Override
protected void onCreate(Bundle bundle) {
//... initialization
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 float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof CartAdapter.MyViewHolder) return 1f;
return super.getSwipeThreshold(viewHolder);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
Dan saya memiliki adaptor umum dengan dua jenis tampilan. Di ViewHolder yang ingin saya nonaktifkan swiping, saya lakukan:
public static class MyViewHolder extends RecyclerView.ViewHolder {
public ViewGroup mContainer;
public MyViewHolder(View v) {
super(v);
v.setFocusable(false);
v.setEnabled(false);
mContainer = (ViewGroup) v.findViewById(R.id.container);
}
}