- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从这里得到了似乎是实际版本的 SwipeToDismiss 实现:google code / Roman Nurik .
而且效果很好。但是,我在 ExpandedListView 上使用它,我只希望 Groups 可以忽略。
在 TouchListener 事件中,似乎有两个地方我可以干预并且不允许解散:
mListView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// return false if not on a group ???????
return mSwipeDismissTouchListener.onTouch(view, motionEvent);
..
或在 SwipeDismissListViewTouchListener 事件中:
mSwipeDismissTouchListener = new SwipeDismissListViewTouchListener(
mListView,
new SwipeDismissListViewTouchListener.DismissCallbacks() {
public boolean canDismiss(int position) {
// return false if not on a group ???????
}
public void onDismiss(ListView listView, int[] reverseSortedPositions) {
}
}
);
但我不知道如何判断点击/触摸事件是发生在组还是 child 身上。
有人有什么想法吗?
TIA。
最佳答案
您需要采用您的适配器类并使用 ViewHolder Pattern但有一些修改:公开,公开你的领域,像这样
public static class ViewHolderGroup {
TextView tvName;
ImageView ivLogo;
public boolean isGroup;
}
并将一些变量设置为Tag , 这将定义 wheater
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ViewHolderGroup holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_group_operator, null);
holder = new ViewHolderGroup();
holder.tvName = (TextView) convertView.findViewById(R.id.layout_row_group_operator_tv_Name);
holder.ivLogo = (ImageView) convertView.findViewById(R.id.layout_row_group_operator_iv_Logo);
holder.ivLogo.setVisibility(View.GONE);
holder.isGroup = true; // Here we setting field to know this is group
convertView.setTag(holder);
} else {
holder = (ViewHolderGroup) convertView.getTag();
}
....
}
然后在你之前描述的代码中得到这个标签,像这样
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fa = this;
View rootView = inflater.inflate(R.layout.fg_elist, container, false);
final ExpandableListView elMain = (ExpandableListView) rootView.findViewById(R.id.layout_fg_elist_elv_Main);
RouteExpandableListAdapter routesAdapter = new RouteExpandableListAdapter(Rendis.mContext, Rendis.dates, Rendis.routes);
elMain.setAdapter(routesAdapter);
registerForContextMenu(elMain);
elMain.setOnChildClickListener(this);
elMain.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
Rect rect = new Rect();
int childCount = elMain.getChildCount();
int[] listViewCoords = new int[2];
elMain.getLocationOnScreen(listViewCoords);
int x = (int) motionEvent.getRawX() - listViewCoords[0];
int y = (int) motionEvent.getRawY() - listViewCoords[1];
View child;
for (int i = 0; i < childCount; i++) {
child = elMain.getChildAt(i);
child.getHitRect(rect);
if (rect.contains(x, y)) {
RouteExpandableListAdapter.ViewHolderGroup holder = (RouteExpandableListAdapter.ViewHolderGroup) child.getTag();
if(holder.isGroup){
// DO WHAT YOU WANT TO DO
}
break;
}
}
return false;
}
});
return rootView;
}
希望对你有帮助
关于java - Android ExpandedListView 希望 SwipeToDismiss 仅适用于群组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077132/
我能做到SwipeToDismiss但我想恢复刷过的LazyColumn元素恢复到原来的状态。 我不想删除刷过的项目,但想将其恢复到原始状态。 我可以在 RecyclerView 中轻松实现这一点只需
我正在努力实现类似 this 的目标但使用 Jetpack Compose。换句话说,滑动删除就像我们在 RecyclerView 中所做的那样。与 ItemTouchHelper和 class Di
SwipeToDismiss的正确使用方法是什么和 LazyColumn在 android 中撰写 alpha09 ? 我的做法: LazyColumn( modifier = Modifie
我从这里得到了似乎是实际版本的 SwipeToDismiss 实现:google code / Roman Nurik . 而且效果很好。但是,我在 ExpandedListView 上使用它,我只希
我是一名优秀的程序员,十分优秀!