我现在有个小程序,功能实现为打电话。现在已经获取了联系人列表,联系人列表放在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也没有反应,这是怎么回事?求大神
ListView中item中有按钮,就会使item无法获得焦点,无法响应点击事件。
你试试Button的xml中定义 android:focusable="false"
你可以在接下来的代码中点用handler.postDelayed(a.b).b就是延长时间。
长点击后出现隐藏的按钮按钮:可以试试PopupWindow。把隐藏按钮放到PopupWindow中。长按后弹出PopupWindow,过几秒后消失。
这样你的item和button不会冲突了。
button截获了焦点,可以把button的焦点设为false,或者用textview代替;长按后显示该条的拨号按钮,可以在adapter中添加一标志(比如position),在getview中设置如果等于position就显示反之不显示,长按后设置长按的位置,最后更新adapter。ok!
在item的根布局中添加android:descendantFocusability=“blocksDescendants"这个属性试试。
你这种可以 改为 listview.setonitemlongclicklistener 然后弹框提示是否拨打电话
listview.setonitemlongclicklistener 长按监听
如果item里有button,那么listview的onItemClickListener就不能用了