基于地图的短信追踪小练习(6)对话框之item的删除

来源:互联网 发布:iphone mac连接 编辑:程序博客网 时间:2024/05/20 00:48

我们现在要点击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);}@Overridepublic int getCount() {return ListAll.friendslist.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic 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() {@Overridepublic 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是获取到的角标),之后再重新刷一下,就可以了。

测试删除功能成功。

0 0
原创粉丝点击