Android:禁用列表视图内的元素滚动
Posted
技术标签:
【中文标题】Android:禁用列表视图内的元素滚动【英文标题】:Android: Disable scolling on an element, inside a listview 【发布时间】:2020-01-06 05:57:35 【问题描述】:喂!
我在活动中有一个列表视图。 在列表视图中有更多的 LinealLayout。其中一个有两个imageview。对于这两个 imageView 都设置了 ontuchlistener。如果用户尝试滚动该布局,是否可以不滚动列表视图?我可以以某种方式阻止列表视图滚动吗?
base_activity.xml:
<ListView
android:id="@+id/items"
style="@style/ListViewStyle"
android:layout_
android:layout_
android:layout_gravity="center"
android:layout_weight="1"></ListView>
item.xml:
<LinearLayout>
<LinearLayout>
</LinearLayout>
<LinearLayout>
<LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_with_image">
<ImageView />
<ImageView />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout>
</LinearLayout>
</LinearLayout>
itemAdapter.java:
imgButton1.setOnTouchListener(new View.OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
if (event.getAction() == MotionEvent.ACTION_MOVE)
// Ignore move events
return false;
if (event.getAction()== MotionEvent.ACTION_DOWN)
doPressDown(1, orderItem);
else if (event.getAction()== MotionEvent.ACTION_UP)
doPressRelease();
return true;
);
imgButton1.setOnTouchListener(new View.OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
if (event.getAction()== MotionEvent.ACTION_DOWN)
doPressDown(-1, orderItem);
else if (event.getAction()== MotionEvent.ACTION_UP)
doPressRelease();
return true;
);
【问题讨论】:
【参考方案1】:如果触摸事件等于ACTION_MOVE
,您可以覆盖onTouch
以使列表视图返回true,从而禁用滚动运动。
listView.setOnTouchListener(new OnTouchListener()
public boolean onTouch(View v, MotionEvent event)
// Create a boolean variable 'scrollable' that can be toggled true/false
if (!scrollable)
return (MotionEvent.ACTION_MOVE.equals(event.getAction()));
else
return false;
);
另一个选项是禁用列表视图,但是,这也会禁用行选择:
listView.setEnabled(false);
【讨论】:
【参考方案2】:是的,这可以通过禁止拦截父视图的触摸事件来实现。要禁止,请使用视图组的requestDisallowInterceptTouchEvent 方法。如;
anyView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
view.getParent().requestDisallowInterceptTouchEvent(true);
);
【讨论】:
getParent 有点复杂,所以我使用接口访问scrollView。 requestDisallowInterceptionTouchEvent() 方法很有用,谢谢!以上是关于Android:禁用列表视图内的元素滚动的主要内容,如果未能解决你的问题,请参考以下文章
在我的 android 应用程序中滚动列表视图时,数据正在消失。我在片段中使用列表视图