我有一个简单的recyclerview,其中包含一个显示数字列表的字符串适配器,我希望避免在滚动时它停止并且用户触摸它。 我已经取消了在用户拖动时手动滚动recyclerview,但我需要以编程方式自己管理滚动(开始和停止滚动)
我不想让用户与recyclerview进行交互。 这是一个小video,显示当用户滚动(停止)时触摸Recyclerview时会发生什么。我想取消这种行为。
这是我取消用户拖动滚动的方式
public static void saveVideos(HttpContent content, String filename, bool overwrite)
{
string pathName = Path.GetFullPath(filename);
using (Stream fs = new FileStream(pathName, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.None))
{
byte[] buffer = content.ReadAsByteArrayAsync().Result;
fs.Write(buffer, 0, buffer.Length);
}
}
通过添加这些代码行,行为没有变化。
recyclerViewSlot.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
// set return "true" = disables scrolling behaviour on dragging
return true;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
答案 0 :(得分:2)
您必须扩展RecyclerView
类,然后手动阻止onTouch
被调用,如下所示:
public class YourRecyclerView extends RecyclerView {
private boolean lock=false;
public YourRecyclerView (Context context) {
super(context);
}
public YourRecyclerView (Context context, AttributeSet attrs) {
super(context, attrs);
}
public YourRecyclerView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(!lock){
return super.onTouchEvent(ev);
}
else{
return true;
}
}
/**
* @return the lock
*/
public boolean isLock() {
return lock;
}
/**
* @param lock the lock to set
*/
public void setLock(boolean lock) {
this.lock = lock;
}
}
答案 1 :(得分:2)
在自定义RecyclerView中覆盖onInterceptTouchEvent,您可以实现这一点。
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
return false;
}