您的位置:首页 > 其它

ListView控件中item中实现的Button的点击事件

2016-09-11 13:25 561 查看
1.适配器我们可以简单的理解为数据与控件之间交互的桥梁,如果我们想要实现在Listview控件之中实现Button的点击事件,就需要把当前的UI线程传进Adapter之中,因此要在Adapter之中设置监听器,即适配器中创建setOnClickListener方法,适配器中定义了ViewHolder静态类定义了button控件,此时需要ViewHolder类中创建setOnClickListener方法,将传进适配器的UI线程,传进ViewHolder类中,然后用button的监听器事件将UI线程传进去,如下图所示:2.示例代码如下:1)Listview的item中的布局文件需要设置:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:descendantFocusability="blocksDescendants"><TextViewandroid:id="@+id/item_cc_name"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/item_cc_del"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="删除"/></LinearLayout> 2)这里由于需要将内容提供者中的数据加载到Listview中,我们自定义了CursorAdapter适配器。/*** CursorAdapter 内部已经实现了 视图的复用,不需要再处理了*/public class MyDataAdapter extends CursorAdapter {private View.OnClickListener mOnClickListener;public MyDataAdapter(Context context, Cursor c, int flags) {super(context, c, flags);}public void setOnClickListener(View.OnClickListener onClickListener) {mOnClickListener = onClickListener;}@Overridepublic void bindView(View view, Context context, Cursor cursor) {ViewHolder holder = (ViewHolder) view.getTag();holder.bindView(cursor);}/*** 创建布局** @param context* @param cursor* @param parent* @return*/@Overridepublic View newView(Context context, Cursor cursor, ViewGroup parent) {View ret = null;ret = LayoutInflater.from(context).inflate(R.layout.item_cc, parent, false);ViewHolder holder = new ViewHolder(ret);holder.setOnClickListener(mOnClickListener);ret.setTag(holder);return ret;}private static class ViewHolder {private TextView mTxtName;private Button mBtnDel;private View.OnClickListener mOnClickListener;public ViewHolder(View itemView){mTxtName = (TextView) itemView.findViewById(R.id.item_cc_name);mBtnDel = (Button) itemView.findViewById(R.id.item_cc_del);}public void setOnClickListener(View.OnClickListener onClickListener) {mOnClickListener = onClickListener;mBtnDel.setOnClickListener(onClickListener);}public void bindView(Cursor cursor){int index = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);String str = cursor.getString(index);mTxtName.setText(str);index = cursor.getColumnIndex(ContactsContract.Contacts._ID);long id = cursor.getLong(index);mBtnDel.setTag(id);}}} 3).UI线程的示例代码:public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener, View.OnClickListener {private MyDataAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {ListView listView = (ListView) findViewById(R.id.contact_list);ContentResolver resolver = getContentResolver();// 获取联系人列表,指定名称列Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,new String[]{ContactsContract.Contacts._ID, // _ID必须存在,显示在ListView时ContactsContract.Contacts.DISPLAY_NAME},null,null,null);//mAdapter = new SimpleCursorAdapter(// this,// R.layout.item_cc,// cursor,// new String[]{// ContactsContract.Contacts.DISPLAY_NAME// },// new int[]{R.id.item_cc_name},// CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER//);mAdapter = new MyDataAdapter(this, cursor, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);//mAdapter.setOnClickListener(this);listView.setAdapter(mAdapter);listView.setOnItemClickListener(this);listView.setOnItemLongClickListener(this);}private void init() {ContentResolver resolver = getContentResolver();// 获取联系人列表,指定名称列Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,new String[]{ContactsContract.Contacts.DISPLAY_NAME,},null,null,null);if (cursor != null) {while (cursor.moveToNext()) {int index = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);if (index != -1) {String name = cursor.getString(index);Log.d("Contact", "name = " + name);}}cursor.close();}}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {// id 就是联系人 id// select * from data where contact_id = id and type = phoneContentResolver resolver = getContentResolver();// 获取一个联系人的所有手机号,那么使用 Phone 这个类Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",new String[]{Long.toString(id)},null);if (cursor != null) {while (cursor.moveToNext()) {// 获取手机号的列int index = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);if (index != -1) {String phone = cursor.getString(index);Log.d("Phone", "email = " + phone);}}cursor.close();}}@Overridepublic boolean onItemLongClick(AdapterView<?> parent,View view,int position,long id) {boolean b = false;// 1. ContentResolver// 2. delete + whereContentResolver resolver = getContentResolver();// 3. 删除联系人,必须要使用 RawContacts 表// delete from raw_contacts where contact_id=idint num = resolver.delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.RawContacts.CONTACT_ID + "=?",new String[]{Long.toString(id)});if (num > 0) {requeryCursor();}return b;}public void requeryCursor() {ContentResolver resolver = getContentResolver();Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);mAdapter.changeCursor(cursor);}@Overridepublic void onClick(View v) {Object tag = v.getTag();Long id = (Long) tag;Toast.makeText(MainActivity.this, "del " + id, Toast.LENGTH_SHORT).show();ContentResolver resolver = getContentResolver();int num = resolver.delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.RawContacts.CONTACT_ID + "=?",new String[]{Long.toString(id)});if (num > 0) {requeryCursor();}}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐