publicclassMyCustomObject{ // Step 1 - This interface defines the type of messages I want to communicate to my owner publicinterfaceMyCustomObjectListener{ // These methods are the different events and // need to pass relevant arguments related to the event triggered publicvoidonObjectReady(Stringtitle); // or when data has been loaded publicvoidonDataLoaded(SomeDatadata); }}
2.创建一个listener变量以及一个setter方法以便可以调用
publicclassMyCustomObject{// ...// Step 2 - This variable represents the listener passed in by the owning object// The listener must implement the events interface and passes messages up to the parent.privateMyCustomObjectListenerlistener;}
publicclassMyCustomObject{ // Constructor where listener events are ignored publicMyCustomObject(){ // set null or default listener or accept as argument to constructor this.listener=null; }
// Assign the listener implementing events interface that will receive the events publicvoidsetCustomObjectListener(MyCustomObjectListenerlistener){ this.listener=listener;
}}
3.Implements 接口
publicclassMyParentActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ // ... // Create the custom object MyCustomObjectobject=newMyCustomObject(); // Step 4 - Setup the listener for this object object.setCustomObjectListener(newMyCustomObjectListener(){ @Override publicvoidonObjectReady(Stringtitle){ // Code to handle object ready }
@Override publicvoidonDataLoaded(SomeDatadata){ // Code to handle data loaded from network // Use the data here! } }); }}
4事件触发
(例子中就是数据载入完成)
publicclassMyCustomObject{ // Listener defined earlier publicinterfaceMyCustomObjectListener{ publicvoidonObjectReady(Stringtitle); publicvoidonDataLoaded(SomeDatadata); }
// Member variable was defined earlier privateMyCustomObjectListenerlistener;
// Constructor where listener events are ignored publicMyCustomObject(){ // set null or default listener or accept as argument to constructor this.listener=null; loadDataAsync(); }
// ... setter defined here as shown earlier
publicvoidloadDataAsync(){ AsyncHttpClientclient=newAsyncHttpClient(); client.get("https://mycustomapi.com/data/get.json",newJsonHttpResponseHandler(){ @Override publicvoidonSuccess(intstatusCode,Header[]headers,JSONObjectresponse){ // Networking is finished loading data, data is processed SomeDatadata=SomeData.processData(response.get("data")); // Do some other stuff as needed.... // Now let's trigger the event if(listener!=null) listener.onDataLoaded(data);// <---- fire listener here } });