(reproduced) A click event in the activity that responds to the ListView internal button

Source: Internet
Author: User

Use Interface Callbacks and use Abstract class callbacks .

1. use the interface callback:

Adapter class

 1 package com.ivan.adapter; 2 3 Import java.util.List; 4 5 Import Android.content.Context; 6 Import Android.util.Log; 7 Import Android.view.LayoutInflater; 8 Import Android.view.View; 9 Import android.view.view.onclicklistener;10 Import android.view.viewgroup;11 import android.widget.baseadapter;12 Import android.widget.button;13 Import android.widget.textview;14 17 Import com.ivan.listvieweventcallback.r;16 public class Contentadapter extends Baseadapter implements Onclicklistener {private static final String TAG = "C Ontentadapter "; private list<string> mcontentlist;21 private layoutinflater minflater;22 private callb     ACK mcallback;23 24/**25 * Custom Interface for callback button click event to Activity26 * @author Ivan Xu27 * 2014-11-2628 */29  Public interface Callback {The public void click (View v), and}32 public contentadapter (context context, list<string> contentlist,34 Callback Callback) {mcontentlist = contentlist;36 Minflater = layoutinflater.from (context), PNS Mcallback = callback;38}39 @Override The public int getcount () {log.i (TAG, "GetCount"); Mcontentlist.size ();}45 Verride47 public Object getItem (int position) {log.i (TAG, "GetItem"), Return Mcontentlist.get (POS         ition);}51 @Override53 public long getitemid (int position) {log.i (TAG, "Getitemid"); 55 Return position;56}57 @Override59 public View getView (int position, view Convertview, ViewGroup parent)             {LOG.I (TAG, "GetView"); Viewholder holder = null;62 if (Convertview = = null) {63 Convertview = minflater.inflate (R.layout.list_item, null); holder = new Viewholder (); holder.t Extview = (TextView) convertView66. Findviewbyid (r.id.textview1); Holder.button = (Butto N) convertview.findviewbYid (R.id.button1), Convertview.settag (holder), or else {holder = (Viewholder) conver Tview.gettag ();}72 Holder.textView.setText (Mcontentlist.get (position));     Button.setonclicklistener (this); Holder.button.setTag (position); return convertview;78}79 80 public class Viewholder {Bayi public TextView textview;82 public button button;83}84 85//Response button click event, Invokes a child-defined interface and passes in the View86 @Override87 public void OnClick (View v) {Mcallback.click (v); 89}90}

Activity class:

 1 package Com.ivan.listvieweventdemo; 2 3 Import java.util.ArrayList; 4 Import java.util.List; 5 6 Import android.app.Activity; 7 Import Android.os.Bundle; 8 Import Android.view.Menu; 9 Import android.view.view;10 Import android.widget.adapterview;11 Import ANDROID.WIDGET.ADAPTERVIEW.ONITEMCLICKLISTENER;12 Import android.widget.listview;13 Import android.widget.Toast;14 Import com.ivan.adapter.contentadapter;16 Import com.ivan.adapter.contentadapter.callback;17 Import Com.ivan.listvieweventcallback.r;18//mainactivity need to implement custom interfaces public class Mainactivity extends Activity implements onitemclicklistener,20 Callback {21 22//Simulate data loaded in ListView, private static final string[] CONTENTS = {"north Beijing "," Shanghai "," Guangzhou "," Shenzhen "," Suzhou ", 24" Nanjing "," Wuhan "," Changsha "," Hangzhou "};25 private list<string> contentlist;26 PR Ivate ListView mlistview;27 @Override29 protected void onCreate (Bundle savedinstancestate) {Super.on Create (savedinstancestate);Etcontentview (R.layout.activity_main); init ();}35-private void init () {Notoginseng Mlistview = ( ListView) Findviewbyid (r.id.listview), ContentList = new arraylist<string> (), n-(int i = 0; i < Contents.length; i++) {Contentlist.add (contents[i]);}42//43 Mlistview.setadapter (New Contentadap ter (This, contentlist, this)); Mlistview.setonitemclicklistener}46 @Override48 public b     Oolean Oncreateoptionsmenu (Menu menu) {getmenuinflater (). Inflate (R.menu.main, menu); return true;51 }52 53/**54 * Respond to the Click event of item in ListView */56 @Override57 public void Onitemclick (ADAPTERVIEW&LT;?&G T arg0, View v, int position, long id) {Toast.maketext (this, "The ListView item is clicked!) , click "+ position,59 Toast.length_short". Show (); 60}61 62/**63 * Interface method, responding to the ListView button click  Event */65 @Override66   public void Click (View v) {toast.maketext (mainactivity.this,69) listview The inside button is clicked!                 , location is-"+ (integer) V.gettag () +", content is "+" + contentlist.get ((integer) V.gettag ()), 71 Toast.length_short). Show (); 72}73}

2. using abstract class callbacks

Adapter class:

 1 package com.ivan.adapter; 2 3 Import java.util.List; 4 5 Import Android.content.Context; 6 Import Android.util.Log; 7 Import Android.view.LayoutInflater; 8 Import Android.view.View; 9 Import android.view.view.onclicklistener;10 Import android.view.viewgroup;11 import android.widget.baseadapter;12 Import android.widget.button;13 Import android.widget.textview;14 17 Import com.ivan.listvieweventabstract.r;16 public class Contentadapter extends Baseadapter {private static final String TAG = "Contentadapter"; priva     Te list<string> mcontentlist;21 private layoutinflater minflater;22 private Myclicklistener mlistener;23 24         Public Contentadapter (context context, list<string> contentlist,25 Myclicklistener listener) {26     Mcontentlist = contentlist;27 Minflater = layoutinflater.from (context); Mlistener = listener;29       }30 @Override32 public int getcount () {log.i (TAG, "GetCount"); 34  return Mcontentlist.size ();}36 PNs @Override38 public Object getItem (int position) {LOG.I (TAG, "GetItem"); Mcontentlist.get (position);}42 @Override44 public long getitemid (int positi ON) {log.i (TAG, "Getitemid"), return position;47}48 @Override50 public View GetView (i         NT position, View Convertview, ViewGroup parent) {LOG.I (TAG, "GetView"); Viewholder holder = null;53             if (Convertview = = null) {Convertview = minflater.inflate (R.layout.list_item, null); 55 Holder = new Viewholder (); Holder.textview = (TextView) convertView57. Findviewbyid (r.id . textView1); Holder.button = (Button) Convertview.findviewbyid (R.id.button1); AG (holder), or else {holder = (Viewholder) convertview.gettag ();}63 Holder.text View.settext (McontentlisT.get (position)); Holder.button.setOnClickListener (Mlistener); Holder.button.setTag (position); 66 Return convertview;67}68 public class Viewholder {TextView textview;71 public ton button;72}73 74/**75 * Abstract class for callbacks * @author Ivan Xu77 * 2014-11-2678 */79 public STA         TIC Abstract class Myclicklistener implements Onclicklistener {80/**81 * Base class OnClick method 82 */83         @Override84 public void OnClick (View v) {Myonclick ((Integer) V.gettag (), V), 86}87 public abstract void Myonclick (int position, View v); 88}89}

Activity class:

 1 package Com.ivan.listvieweventdemo; 2 3 Import java.util.ArrayList; 4 Import java.util.List; 5 6 Import android.app.Activity; 7 Import Android.os.Bundle; 8 Import Android.view.Menu; 9 Import android.view.view;10 Import android.widget.adapterview;11 Import ANDROID.WIDGET.ADAPTERVIEW.ONITEMCLICKLISTENER;12 Import android.widget.listview;13 Import android.widget.Toast;14 Import com.ivan.adapter.contentadapter;16 Import com.ivan.adapter.contentadapter.myclicklistener;17 Import     COM.IVAN.LISTVIEWEVENTABSTRACT.R;18 public class Mainactivity extends Activity implements Onitemclicklistener {20 21 Simulates the data loaded in a ListView. private static Final string[] CONTENTS = {"Beijing", "Shanghai", "Guangzhou", "Shenzhen", "Suzhou", 23 "Nanjing", "     Wuhan "," Changsha "," Hangzhou "};24 private list<string> contentlist;25 private ListView mlistview;26 @Override28 protected void OnCreate (Bundle savedinstancestate) {savedinstancestate super.oncreate (SETCONTENTV); Iew (R.layout.activity_main);}34 (). () (). () (). () () (). {Mlistview = (ListView) Findviewbyid (R.id.listview             ): PNs ContentList = new arraylist<string> (), 0 for (int i =; i < contents.length; i++) {39 Contentlist.add (Contents[i]); 40}41//Instantiate Contentadapter class, and pass in implementation class Mlistview.setadapter (new     Contentadapter (This, ContentList, Mlistener)): Mlistview.setonitemclicklistener (this); 45}46 47 @Override48 public boolean Oncreateoptionsmenu (Menu menu) {getmenuinflater (). Inflate (R.menu.main, menu); return true;51}52 53//Response Item Click event @Override55 public void Onitemclick (adapterview<?> a Rg0, View v, int position, long id) {Toast.maketext (this, "The ListView item is clicked!)      , click the location--"+ position,57 Toast.length_short". Show (); 58}59 60/**61 * Implementation class, Response button click event 62 */63 private Myclicklistener Mlistener = new MyclicklIstener () {@Override65 public void Myonclick (int position, View v) {Toast.maketext (67 mainactivity.this,68 "The inside button of the ListView is clicked!                     , location is-"+ position +", content is-"+ contentlist.get (position), Toast.length_short) 70 . Show (); 71}72};73}

The following is the layout file

1 <relativelayout xmlns:android= "http://schemas.android.com/apk/res/android" 2     xmlns:tools= "/http/ Schemas.android.com/tools "3     android:layout_width=" match_parent "4     android:layout_height=" Match_parent "5     android:paddingbottom= "@dimen/activity_vertical_margin" 6     android:paddingleft= "@dimen/activity_ Horizontal_margin "7     android:paddingright=" @dimen/activity_horizontal_margin "8     android:paddingtop=" @ Dimen/activity_vertical_margin "9     tools:context=". Mainactivity ">10     <listview12         android:id=" @+id/listview         [android:layout_width=] Match_ Parent "         android:layout_height=" match_parent ">15     </listview>16 </RelativeLayout>
<?xml version= "1.0" encoding= "Utf-8"? ><linearlayout xmlns:android= "http://schemas.android.com/apk/res/ Android "    android:layout_width=" match_parent "    android:layout_height=" Wrap_content "    android: Descendantfocusability= "blocksdescendants"    android:orientation= "vertical" >    <textview        android : id= "@+id/textview1"        android:layout_width= "wrap_content"        android:layout_height= "Wrap_content        " android:text= "Content"        android:textcolor= "#ff0000"        android:textsize= "20sp"/>    <button        Android:id= "@+id/button1"        android:layout_width= "wrap_content"        android:layout_height= "Wrap_content"        android:focusable= "false"        android:text= "button"        android:textcolor= "#ff0000"        android: Textsize= "20SP"/></linearlayout>

The difference between the two approaches is that when an abstract class is implemented in the activity, it can only be defined as a member variable, and cannot be implemented directly by the activity because Java does not support multiple inheritance. The interface can be implemented either directly by the activity or by its member variables.

Original URL: http://www.cnblogs.com/ivan-xu/p/4124967.html

(reproduced) A click event in the activity that responds to the ListView internal button

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.