ListView之在Activity里面重写item里面的事件
Posted 丨丿丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ListView之在Activity里面重写item里面的事件相关的知识,希望对你有一定的参考价值。
ListView是android里面用到很多的一个控件,这使用起来比较简单,又很实用。今天要讲的就是在Activity进而 重写Adapter的Button事件,废话不多说,就直接开始了 1、创建一个适配器FindAdapter.java public class FindAdapter extends CursorAdapter implements OnClickListener{ private Context context;//this context private OnItemFindClick onItemFindClick; public FindAdapter(Cursor cursor){ super( IM.im, cursor, FLAG_REGISTER_CONTENT_OBSERVER ); } public View getView(int pos, View convertView, ViewGroup parent) { return renderUser(pos,convertView,parent); } // 将分割线放在上面,利于判断 public View renderUser(int pos,View view,ViewGroup parent){ FindHolder findHolder = null; if(view == null){ view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.tt_item_find, parent,false); findHolder = new FindHolder(view); findHolder.btnRefuse.setOnClickListener(this); findHolder.btnRefuse.setTag(pos);//这里很容易忘记 findHolder.btnAccept.setOnClickListener(this); findHolder.btnAccept.setTag(pos); view.setTag(findHolder); }else{ //ant findHolder = (FindHolder)view.getTag(); } Cursor cursor = (Cursor)getItem(pos); String accountStr = cursor.getString(cursor.getColumnIndex(ContactProvider.ContactColumns.ACCOUNT)); String nameStr = cursor.getString(cursor.getColumnIndex(ContactProvider.ContactColumns.NAME)); findHolder.tvAccount.setText(accountStr+""); findHolder.tvName.setText(nameStr); findHolder.ivcAvatar.setImageDrawable(IM.getAvatar(accountStr)); return view; } public void setOnItemFindClick(OnItemFindClick onItemFindClick){ this.onItemFindClick = onItemFindClick; } class FindHolder{ TextView tvAccount; TextView tvName; ImageViewCircle ivcAvatar; Button btnRefuse; Button btnAccept; public FindHolder(View v){ tvAccount = (TextView)v.findViewById(R.id.tt_item_find_account); tvName = (TextView)v.findViewById(R.id.tt_item_find_name); ivcAvatar = (ImageViewCircle)v.findViewById(R.id.tt_item_find_icon); btnRefuse = (Button)v.findViewById(R.id.tt_item_find_refuse); btnAccept = (Button)v.findViewById(R.id.tt_item_find_accept); } } public interface OnItemFindClick{ public void onAcceptClick(View v); public void onRefuseClick(View v); } public void onClick(View v) { switch(v.getId()){ case R.id.tt_item_find_accept://答应请求 onItemFindClick.onAcceptClick(v); break; case R.id.tt_item_find_refuse://拒绝请求 onItemFindClick.onRefuseClick(v); break; } } public void bindView(View arg0, Context arg1, Cursor arg2) {} public View newView(Context arg0, Cursor arg1, ViewGroup arg2) { return null; } } 2.当然需要一个布局哦!这里是我的布局tt_item_find.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" > <com.chat.ui.widget.ImageViewCircle android:id="@+id/tt_item_find_icon" android:layout_width="45dp" android:layout_height="45dp" android:layout_marginLeft="10dp" android:scaleType="centerCrop" android:src="@drawable/tt_login_logo" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="10dp" > <TextView android:id="@+id/tt_item_find_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/contact_realname_color" android:textSize="17sp" /> <TextView android:id="@+id/tt_item_find_account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/contact_name_color" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="right" android:orientation="horizontal" android:layout_marginRight="10dp"> <Button android:id="@+id/tt_item_find_accept" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:background="@drawable/tt_show_head_toast_bg" android:text="@string/tt_item_find_accept" android:textColor="@color/contact_realname_color" android:paddingLeft="5dp" android:paddingRight="5dp"/> <Button android:id="@+id/tt_item_find_refuse" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/tt_show_head_toast_bg" android:text="@string/tt_item_find_refuse" android:textColor="@color/contact_realname_color" android:paddingLeft="5dp" android:paddingRight="5dp"/> </LinearLayout> </LinearLayout> 3.现在item开始了,就开始写Activity了 public class FindActivity extends Activity implements OnItemFindClick{ private ListView list; private FindAdapter findAdapter; private OnItemFindClick onItemFindClick; private Cursor cursor; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initPatent(); init(); initData(); } //cursor的数据自己去加载吧 private void initData(){} private void init(){ context = this; list = (ListView)contentView.findViewById(R.id.tt_activity_find_list); onItemFindClick = this; findAdapter = new FindAdapter(cursor); findAdapter.setOnItemFindClick(onItemFindClick); list.setAdapter(findAdapter); } //接受好友请求 public void onAcceptClick(View v) { Log.e("findActivity-->","accept"); Log.e("find---》",""+ v.getTag()); final Cursor cursor = (Cursor)findAdapter.getItem((Integer) v.getTag()); } //拒绝好友请求 public void onRefuseClick(View v) { Log.e("findActivity-->","refuse"); } } 4.activitty的布局自己去写吧!好了就完事了。
以上是关于ListView之在Activity里面重写item里面的事件的主要内容,如果未能解决你的问题,请参考以下文章
给Listview里面Item里的每一个控件怎么设定点击事件