我正在使用recyclerview 22.2.0和帮助程序类ItemTouchHelper.SimpleCallback启用对列表的滑动到关闭选项。但是,由于上面有一种标头,因此需要禁用适配器第一个位置的滑动行为。由于RecyclerView.Adapter没有isEnabled()方法,因此我尝试通过ViewHolder创建本身中的isEnabled()和isFocusable()方法禁用视图交互,但是没有成功。我试图将滑动阈值调整为一个完整值,例如SimpleCallback的方法getSwipeThreshold()中的0f或1f,但也没有成功。
我的代码的一些片段可以帮助您帮助我。
我的活动:
@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);
}
我有一个具有两种视图类型的通用适配器。在要禁用滑动的ViewHolder中,我执行了以下操作:
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);
}
}