gpt4 book ai didi

android - 使用 ItemTouchHelper.SimpleCallback 禁用在 RecyclerView 中的位置滑动

转载 作者:IT老高 更新时间:2023-10-28 13:11:51 28 4
gpt4 key购买 nike

我正在使用 recyclerview 22.2.0 和辅助类 ItemTouchHelper.SimpleCallback 来启用列表中的 swipe-to-dismiss 选项。但由于我上面有一种标题,我需要禁用适配器第一个位置的滑动行为。由于 RecyclerView.Adapter 没有 isEnabled() 方法,我尝试通过 isEnabled() 方法禁用 View 交互strong>isFocusable() 在 ViewHolder 创建本身,但没有成功。我尝试将滑动阈值调整为完整值,例如 SimpleCallback 的方法 getSwipeThreshold() 中的 0f ot 1f,但也没有成功。

我的一些代码 fragment 可以帮助你帮助我。

我的 Activity :

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

我有一个带有 两种 View 类型的通用适配器。在我想禁用滑动的 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);
}
}

最佳答案

玩了一会之后,我发现SimpleCallback 有一个名为getSwipeDirs() 的方法。因为我在 not swipable 位置有一个特定的 ViewHolder,所以我可以利用 instanceof 来避免滑动。如果不是您的情况,您可以使用适配器中 ViewHolder 的位置来执行此控制。

Java

@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof CartAdapter.MyViewHolder) return 0;
return super.getSwipeDirs(recyclerView, viewHolder);
}

Kotlin

override fun getSwipeDirs (recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
if (viewHolder is CartAdapter.MyViewHolder) return 0
return super.getSwipeDirs(recyclerView, viewHolder)
}

关于android - 使用 ItemTouchHelper.SimpleCallback 禁用在 RecyclerView 中的位置滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com