我有一个ExpandableListView,每行有四个元素。在这一行中,我在第一个项目上有一个TouchListener。现在,当我单击(并拖动)此项目时,我想要拖动整行,而不仅仅是第一个项目,并将背景可绘制设置为整行。
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
View wholerow = view.getRootView().findViewById(R.id.dbtabellelistviewitem);
wholerow.setBackgroundDrawable(view.getResources().getDrawable(R.drawable.circle));
view.setBackgroundDrawable(view.getResources().getDrawable(R.drawable.square));
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
case MotionEvent.ACTION_UP:
view.setBackgroundDrawable(null);
}
return true;
但View wholerow只给了我列表的第一行。如何获取我点击的项目的整行?
提前致谢。
答案 0 :(得分:1)
在您的情况下,我怀疑视图中创建的每一行都具有相同的ID(在布局中定义)。 FindViewById在找到合适的视图(具有正确的ID)后立即停止,它不会处理具有相同ID的视图。这就是为什么你的方法总会返回第一行的原因。
要检索父行,您需要使用getParent()手动浏览视图的父级
像这样的方法应该有效:
public View findParentWithId(View myView, int idParent) {
if (myView.getParent() instanceof View) {
View parent = (View) myView.getParent();
if (parent.getId() == idParent) {
return parent;
} else {
return findParentWithId(parent, idParent);
}
}
return null;
}