2 qq 30130435 qq_30130435 于 2016.03.26 22:24 提问

Android的ListView如何实现长点击后出现隐藏的按钮按钮 10C

我现在有个小程序,功能实现为打电话。现在已经获取了联系人列表,联系人列表放在ListView中,使用了BaseAdapter。我现在想实现这样的一个功能,长按ListView里一个联系人Item,然后此Item右边出现拨打电话的按钮,如果按钮出现几秒后用户还不点击,按钮则隐藏。目前我BaseAdapter里getView方法是这样写的

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LinearLayout ll=null;
        if (convertView!=null) {
            ll=(LinearLayout)convertView;

        }else{
            ll=(LinearLayout) LayoutInflater.from(context).inflate(R.layout.call_name_num, null);

        }

        TextView userName=(TextView) ll.findViewById(R.id.textName);
        TextView userNumber=(TextView) ll.findViewById(R.id.textNumber);

        Button callBtn =(Button)ll.findViewById(R.id.btnCall);
        callBtn.setVisibility(1);
        callBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                System.out.println(">>>>>CallBtn Click");
            }
        });
        userName.setText(phoneUserList.get(position).getName());
        userNumber.setText(phoneUserList.get(position).getNumber());
        return ll;
    }

现在就没思路了,而且我这样写有个问题,添加一个可点击的按钮后,ListView里的联系人就无法点击了,长摁联系人Item也没有反应,这是怎么回事?求大神

9个回答

fengyun703
fengyun703   2016.03.26 22:55

ListView中item中有按钮,就会使item无法获得焦点,无法响应点击事件。
你试试Button的xml中定义 android:focusable="false"

qq_30130435
qq_30130435 感谢!点击问题已解决!
一年多之前 回复
wuzhiqiang_
wuzhiqiang_   2016.03.26 23:06

你可以在接下来的代码中点用handler.postDelayed(a.b).b就是延长时间。

qq_30130435
qq_30130435 感谢回复!我代码里callBtn.setvisibility方法并没有起作用,不知又为何
一年多之前 回复
fengyun703
fengyun703   2016.03.26 23:09

长点击后出现隐藏的按钮按钮:可以试试PopupWindow。把隐藏按钮放到PopupWindow中。长按后弹出PopupWindow,过几秒后消失。
这样你的item和button不会冲突了。

qq_30130435
qq_30130435 谢谢建议!新手,我先了解如何使用
一年多之前 回复
u013112846
u013112846   2016.03.26 23:12

button截获了焦点,可以把button的焦点设为false,或者用textview代替;长按后显示该条的拨号按钮,可以在adapter中添加一标志(比如position),在getview中设置如果等于position就显示反之不显示,长按后设置长按的位置,最后更新adapter。ok!

u013112846
u013112846 在adapter中定义一个int变量,长按的时候把position值赋值给定义的int变量
一年多之前 回复
qq_30130435
qq_30130435 感谢回复!请问那标志是什么,如何写?
一年多之前 回复
luochoudan
luochoudan   Ds   Rxr 2016.03.26 23:19

在item的根布局中添加android:descendantFocusability=“blocksDescendants"这个属性试试。

qq_30130435
qq_30130435 谢谢建议!已解决
一年多之前 回复
lxk_1993
lxk_1993   Rxr 2016.03.28 08:36

你这种可以 改为 listview.setonitemlongclicklistener 然后弹框提示是否拨打电话

cyxevil
cyxevil   2016.03.28 11:13

listview.setonitemlongclicklistener 长按监听

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.28 14:06

如果item里有button,那么listview的onItemClickListener就不能用了

CSDNXIAON
CSDNXIAON   2016.03.30 11:26

Android ListView 按钮点击分页显示
Android ListView 按钮点击分页显示
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!