Ash*_*lok 13 android android-recyclerview android-framelayout android-nestedscrollview
我的应用程序的设计
屏幕 - 1
<NestedScrollview>
<LinearLayout orientation:horizontal">
<RecyclerView-1>
<Framelayout>(contains Recyclerview-2)
</NestedScroll>
Run Code Online (Sandbox Code Playgroud)
屏幕 - 2
<NestedScrollview>
<LinearLayout orientation:horizontal">
<RecyclerView-1>
<Framelayout> (fragment changed, contains Recyclerview-3)
</NestedScroll>
Run Code Online (Sandbox Code Playgroud)
现在,如果用户在屏幕 1 上,则两个 recyclerview 将同时滚动,但在屏幕 2 上,如果用户滚动 RV1,则只有 RV1 会类似地滚动,如果 RV3 滚动,则 RV3 将滚动。尝试了各种停止滚动,但无法停止嵌套滚动视图的滚动。
小智 24
您必须创建一个对触摸和滚动事件不执行任何操作的新类:
public class LockableNestedScrollView extends NestedScrollView {
// by default is scrollable
private boolean scrollable = true;
public LockableNestedScrollView(@NonNull Context context) {
super(context);
}
public LockableNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public LockableNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return scrollable && super.onTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return scrollable && super.onInterceptTouchEvent(ev);
}
public void setScrollingEnabled(boolean enabled) {
scrollable = enabled;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来在您的布局中,您将通过新类更改 NestedScroll:
<your.package.name.path.LockableNestedScrollView>
<LinearLayout
orientation:"horizontal"
android:id="@+id/scroll_name">
<RecyclerView-1>
<Framelayout>(contains Recyclerview-2)
</your.package.name.path.LockableNestedScrollView>
Run Code Online (Sandbox Code Playgroud)
最后在您的活动中:
LockableNestedScrollView myScrollView = (LockableNestedScrollView) findViewById(R.id.scroll_name);
myScrollView.setScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
我希望它可以帮助别人。
小智 6
Kotlin 中的相同解决方案
class LockableNestedScrollView(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
): NestedScrollView(context, attrs, defStyleAttr) {
constructor(context: Context, attrs: AttributeSet?): this(context, attrs, 0)
constructor(context: Context): this(context, null)
private var scrollable = true
override fun onTouchEvent(ev: MotionEvent?): Boolean {
return scrollable && super.onTouchEvent(ev)
}
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
return scrollable && super.onInterceptTouchEvent(ev)
}
fun setScrollingEnabled(enabled: Boolean) {
scrollable = enabled
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10858 次 |
| 最近记录: |