Kaip identifikuoti grįžtamąjį ryšį „Android“?

Naujausiam „Google“ IO buvo pristatymas apie lengvai naudojamų klientų programų diegimą. Deja, tai buvo tik aukšto lygio diskusija be pradinio kodo įgyvendinimo.

Šioje diagramoje yra keli skirtingi grįžimo tako metodai.

2019

03 авг. nustatė user409841 03 rug . 2010-08-03 18:59 '10, 18:59, 2010-08-03 18:59
@ 6 atsakymai

Daugeliu atvejų jūs turite sąsają, kuri eina per jį įgyvendinantį objektą. Dialogai, pavyzdžiui, turi OnClickListener.

Kaip atsitiktinis pavyzdys:

 // The callback interface interface MyCallback { void callbackCall(); } // The class that takes the callback class Worker { MyCallback callback; void onEvent() { callback.callbackCall(); } } // Option 1: class Callback implements MyCallback { void callbackCall() { // callback code goes here } } worker.callback = new Callback(); // Option 2: worker.callback = new MyCallback() { void callbackCall() { // callback code goes here } }; 

Aš tikriausiai susiformavau 2-ojoje versijoje sintaksę.

206
03 авг. atsakymas, kurį pateikė EboMike Aug 03 2010-08-03 19:05 '10, 19:05, 2010-08-03 19:05

Kai, mano nuomone, įvyksta kažkas, paleidžiu įvykį, kuris klauso mano veiklos:

// DEKLARUOTAS (VARTOTOJAS) Žiūrint

  private OnScoreSavedListener onScoreSavedListener; public interface OnScoreSavedListener { public void onScoreSaved(); } // ALLOWS YOU TO SET LISTENER  INVOKE THE OVERIDING METHOD // FROM WITHIN ACTIVITY public void setOnScoreSavedListener(OnScoreSavedListener listener) { onScoreSavedListener = listener; } 

// DEKLARACIJA VEIKLOJE

  MyCustomView slider = (MyCustomView) view.findViewById(R.id.slider) slider.setOnScoreSavedListener(new OnScoreSavedListener() { @Override public void onScoreSaved() { Log.v("","EVENT FIRED"); } }); 

Jei norite sužinoti daugiau apie nuorodas (skambučius) tarp fragmentų, žr. Čia: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

48
21 июля '12 в 4:11 2012-07-21 04:11 atsakymą pateikė HGPB liepos 21 d., 12 val

Nereikia apibrėžti naujos sąsajos, jei galite naudoti esamą: android.os.Handler.Callback . Siųskite atgalinio tipo objektą ir skambinkite skambučio handleMessage(Message msg) atgaliniu handleMessage(Message msg) .

35
22 апр. atsakymą drakonas pateikia balandžio 22 d 2012-04-22 02:20 '12, 2:20, 2012-04-22 02:20

Atgalinio ryšio metodo pavyzdys, naudojant sąsają.

Nustatykite sąsają, „ NewInterface.java“ .

javaapplication1 paketas;

 public interface NewInterface { void callback(); } 

Sukurkite naują klasę NewClass.java . Ji vadins pagrindinės klasės atšaukimo būdą.

 package javaapplication1; public class NewClass { private NewInterface mainClass; public NewClass(NewInterface mClass){ mainClass = mClass; } public void calledFromMain(){ //Do somthing... //call back main mainClass.callback(); } } 

Pagrindinė „JavaApplication1.java“ klasė, skirta „NewInterface“ metodo sąsajai įgyvendinti, yra atgalinis (). Jis sukurs ir pradės naudoti „NewClass“ objektą. Tada „NewClass“ objektas savo skambutį () iškvies savo ruožtu.

 package javaapplication1; public class JavaApplication1 implements NewInterface{ NewClass newClass; public static void main(String[] args) { System.out.println("test..."); JavaApplication1 myApplication = new JavaApplication1(); myApplication.doSomething(); } private void doSomething(){ newClass = new NewClass(this); newClass.calledFromMain(); } @Override public void callback() { System.out.println("callback"); } } 
19
17 июля '15 в 13:48 2015-07-17 13:48 atsakymą pateikė Amol Patil , liepos 17 d. 15 val. 13:48 2015-07-17 13:48

šiek tiek išsiaiškinti drakono atsakymą (nes man teko šiek tiek laiko išsiaiškinti, ką daryti su Handler.Callback ):

Handler gali būti naudojamas, kad galėtumėte grįžti į dabartinį arba kitą sriegį, perduodant jį Message s. Message yra duomenys, kuriuos norite naudoti iš atgalinio ryšio. „ Handler gali būti perduotas „ Handler konstruktoriui, kad būtų išvengta tiesioginio „Handler“ platinimo. taigi, vykdykite kai kurį kodą per atgalinį ryšį iš dabartinio gijos:

 Message message = new Message(); <set data to be passed to callback - eg message.obj, message.arg1 etc - here> Callback callback = new Callback() { public boolean handleMessage(Message msg) { <code to be executed during callback> } }; Handler handler = new Handler(callback); handler.sendMessage(message); 

EDIT: tiesiog suprato, kad geriausias būdas gauti tą patį rezultatą (atėmus kontrolę tiksliai, kada jums reikia paskambinti):

 post(new Runnable() { @Override public void run() { <code to be executed during callback> } }); 
19
19 окт. atsakymas pateikiamas J.Gnu 19 spalis 2012-10-19 17:22 '12, 17:22, 2012-10-19 17:22

Šiam tikslui taip pat galite naudoti „ LocalBroadcast “. Čia yra greitas pataisymas.

Sukurkite transliacijos imtuvą:

  LocalBroadcastManager.getInstance(this).registerReceiver( mMessageReceiver, new IntentFilter("speedExceeded")); private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Double currentSpeed = intent.getDoubleExtra("currentSpeed", 20); Double currentLatitude = intent.getDoubleExtra("latitude", 0); Double currentLongitude = intent.getDoubleExtra("longitude", 0); // ... react to local broadcast message } 

Štai kaip galite jį paleisti.

 Intent intent = new Intent("speedExceeded"); intent.putExtra("currentSpeed", currentSpeed); intent.putExtra("latitude", latitude); intent.putExtra("longitude", longitude); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 

Atšaukti registruotojo registraciją onPause:

 protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); } 
11
29 авг. Rohit Mandiwal atsakymas rugpjūčio 29 d 2015-08-29 04:34 '15 at 4:34 2015-08-29 04:34

Kiti klausimai apie žymes arba Ask a question