首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓CardView拖放ItemTouchHelper

安卓CardView拖放ItemTouchHelper
EN

Stack Overflow用户
提问于 2016-07-20 02:20:43
回答 1查看 1.5K关注 0票数 0

我试着在谷歌上到处找,但是找不到解决我的问题的方法。

基本上,我有一个利用CardViews的RecyclerView,我想允许在这些cardview上拖放。滑动可以很好地工作,但在ItemTouchHelper中,拖放不起作用。我不知道为什么,我已经指定了正确的移动方向。

我可以向左和向右滑动swipeDirs,但在dragDirs上上下滑动不起作用。我不确定这是不是模拟器本身不能识别“拖拽”的问题,因为如果我上下连接到swipeDirs,我可以在任何方向上滑动作为测试。

我没有得到任何拖放工作的视觉效果

代码语言:javascript
复制
ItemTouchHelper.Callback scb = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT){
    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target){
        //call back to adapter to swap positions, the Error is not with this line of code (at least not yet)
        return true;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction){

    }
};

ItemTouchHelper ith = new ItemTouchHelper(scb);
ith.attachToRecyclerView(recyclerView);

感谢您的帮助,谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-07-20 02:46:39

弄清楚了,你需要在你的适配器中重写onBindViewHolder

代码语言:javascript
复制
@Override
public void onBindViewHolder(Adapter.ViewHolder  holder, int position){
    final Adapter.ViewHolder xholder = holder;
    holder.card.setOnTouchListener(new View.OnTouchListener(){
        @Override
        public boolean onTouch(View view, MotionEvent event){
            if(MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN)
                listener.onStartDrag(xholder);
            return false;
        }
    });
}

然后在包含ItemTouchHelper的RecyclerList中

代码语言:javascript
复制
@Override
public void onStartDrag(ViewHolder holder){
    itemTouchHelper.startDrag(holder);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38465822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档