我们现在要点击item中的button弹出确认删除的对话框,点击确认之后删除listview中的对应item
初始思路:
重写onItemClick方法即可。
写完一点,发现没有动静!这不应该,百度发现是因为listview的item中有button,它抢占了点击事件的焦点。所以点击item是监听不到的。
解决方案:
在父布局中:
加入:
android:descendantFocusability="blocksDescendants"
在子控件(Button等)中加入
android:focusable="false"
可以避免焦点被抢占
那么,接着,我们要来实现item中的button的点击事件:
我们把适配器重新继承自baseadapter并且在getview中加入相关逻辑:
public class FriendsAdapter extends BaseAdapter {
private int resourceId;
private LayoutInflater mInflater;
private Context context;
private List<Friends> data = new ArrayList<Friends>();
public FriendsAdapter(Context context,ArrayList<Friends> data)
{
this.context = context;
this.data = data;
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return ListAll.friendslist.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.friends_list_item, null);
holder.info = (TextView)convertView.findViewById(R.id.name_cell);
holder.viewBtn = (Button)convertView.findViewById(R.id.delete_button_cell);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.info.setText((String)ListAll.friendslist.get(position).getName());
holder.viewBtn.setTag(position);
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//showInfo(position);
LayoutInflater inflater = getLayoutInflater();
layout = inflater.inflate(R.layout.dialog_delete,null);
ad = new AlertDialog.Builder(FriendListActivity.this).setView(layout).show();
//点击勾勾,代表确认删除
button4 = (Button)layout.findViewById(R.id.btn_dialog_ok2);
button4.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
listView.setAdapter(adapter);
ListAll.friendslist.remove(position);
ad.dismiss();
}
});
//点击叉叉,代表取消删除
button5 = (Button)layout.findViewById(R.id.btn_dialog_close2);
button5.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
ad.dismiss();
}
});
}
});
return convertView;
}
}
删除用remove函数(position是获取到的角标),之后再重新刷一下,就可以了。
测试删除功能成功。