ExpandableListView的一个不可思议的问题!!!

孙培雨 2012-11-30 09:56:31
首先我来说说我的项目场景:我有这样一个需求,向右滑动ExpandableListView中的Child,动态显示Child中的【Delete】按钮。
这是我Child节点的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/textChildTitle"
android:text="No Data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="40dp"
android:layout_gravity="left|center_vertical" />
<TextView
android:id="@+id/textChildMoney"
android:text="No Data"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingRight="10dp"
android:gravity="right|center_vertical" />
<Button
android:id="@+id/btnDel"
android:text="删除"
android:textColor="@android:color/white"
android:textSize="10dp"
android:background="@drawable/btn_delete_x"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:layout_gravity="right|center_vertical"
android:visibility="gone" />
</LinearLayout>

前面的两个是显示数据的,最后一个Button是删除按钮,默认不显示。当我在界面上面滑动的时候,获取滑动位置的View,然后通过findViewById来获取Button,最后设置Button为显示状态,代码如下:

//获取手指开始按屏幕的位置和最后抬起手指的位置
int pos1 = this.elv.pointToPosition((int)e1.getX(),(int)e1.getY());
int pos2 = this.elv.pointToPosition((int)e2.getX(),(int)e2.getY());

//先判断是否触发Child的delete事件
//如果起始位置【pos1】和结束位置【pos2】是在同一个【Child】并且这个【Child】的位置有效
//并且滑动距离大于100px,则触发Delete
if (pos1 > -1 && pos1 == pos2 && (e2.getX() - e1.getX() > 100) && (e2.getX() - e1.getX() < 200)){
//获取当前Child的【Delete】按钮
Button btnDel = (Button)elv.getChildAt(pos1).findViewById(R.id.btnDel);
if (btnDel != null){
btnDel.setVisibility(View.VISIBLE);
btnDel.setText("删除"+ pos1); //我将当前所在的位置【Pos1】写到按钮上面,方便调试
btnDel.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "POS:" + ((TextView)((View)v.getParent()).findViewById(R.id.textChildMoney)).getText(), Toast.LENGTH_SHORT).show();

}
});
Log.i("BTN Show","SHOW:" + pos1);
//btnDel.setfo
return true;
}
}

然后在模拟器上面调试,下面是调试步骤:
1、这是程序刚运行的时候的状态【如下图】:

2、我展开第二组,并且在第一个Child上面滑动触发Delete【效果如下图】:

如上图所示,按钮成功显示,并且后面显示了【Pos】当前所在的位置,但是我不明白:为什么当前位置为2?
3、我再在第二组上面,在第二个Child上面滑动【效果如下】:

这边也是正常的,位置为3
4、接下来,是为题出现的地方,我点击第一组,第一组展开,出现一个匪夷所思的现象:

如图:第二组的第二个Child中的按钮,显示到第一组的第一个Child上面,为什么会出现这样的问题?

请各位帮帮忙,这边我研究了好久,终究不知道是怎么回事,先谢谢了!
...全文
1613 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
祝福V 2015-07-22
  • 打赏
  • 举报
回复
楼主这个问题解决了吗,我在项目中也遇到了同样的问题,还没想到办法解决,求指点,谢谢
kfcve123 2013-08-23
  • 打赏
  • 举报
回复
引用 7 楼 Temptat10nYe 的回复:
[quote=引用 5 楼 kfcve123 的回复:] 楼主求demo学习啊,我也遇到同样的界面需求,滑动出现删除按钮的问题kfcve123@163.com
请问你是否完成了,我有同样的需求,能否帮个忙呢[/quote]自定义个ExpandListView继承父类,然后重写了两个接口,在activity实现这个接口
门前大桥下 2013-08-20
  • 打赏
  • 举报
回复
引用 5 楼 kfcve123 的回复:
楼主求demo学习啊,我也遇到同样的界面需求,滑动出现删除按钮的问题kfcve123@163.com
请问你是否完成了,我有同样的需求,能否帮个忙呢
门前大桥下 2013-08-20
  • 打赏
  • 举报
回复
楼主、你好,能否请教一下,我的ontouch事件见听不到MotionEvent.ACTION_MOVE。不能滑动,请问能否给予帮助呢?
kfcve123 2013-07-05
  • 打赏
  • 举报
回复
楼主求demo学习啊,我也遇到同样的界面需求,滑动出现删除按钮的问题kfcve123@163.com
Aa901216 2013-04-16
  • 打赏
  • 举报
回复
怎么没解决第二个问题?
搬不搬砖 2012-11-30
  • 打赏
  • 举报
回复
我的理解是,你通过if(convertView == null) ... else ...来创建子视图,可能系统在调用getChildView时把原本属于第二组第二个的View分配给第一组第一个了,而第二组第二个又重新创建了一个,导致了这种现象
孙培雨 2012-11-30
  • 打赏
  • 举报
回复
引用 1 楼 windspeaker 的回复:
pointToPosition是AbsListView的接口,获得的是纯粹的位置,而不是第几组第几个,如果要在ExpandableListView中用,估计还要getExpandableListPosition和getPackedPositionGroup,getPackedPositionChild配合使用才行。 第二个问题,估计和adapter中的getChil……
对于第二个问题,我确实是只是显示,没有隐藏,但是我是显示当前点击的Child中的Button,即使我没有隐藏它,但是也不应该跑到别的组去呀!这点儿我很困惑!
搬不搬砖 2012-11-30
  • 打赏
  • 举报
回复
pointToPosition是AbsListView的接口,获得的是纯粹的位置,而不是第几组第几个,如果要在ExpandableListView中用,估计还要getExpandableListPosition和getPackedPositionGroup,getPackedPositionChild配合使用才行。 第二个问题,估计和adapter中的getChildView的实现有关,是不是有类似if (convertView == null)else这样的,你查一下代码看对于button的处理,是不是只有设置显示而没有设置隐藏

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧