2016-11-23 3 views
0

können also sagen, ich habe diese Schnittstelle:Konstruktor in Interface und abstrakt?

public interface IBox 
{ 
    public void onEvent(int eventType, View control, Object data); 
} 

Und ich habe eine Zugriffsklasse es:

public class Rectangle 
    { 
    private IBox onEvent; 


public Rectangle(Context context, View rowRoot) { 
     super(context); 
     onEvent = (Rectangle) context; 
    } 
     @Override 

    public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.buttonClick: 
       // send data : data1 and data2; 
       onEvent.onEvent(data1,null, data2); 
      break; 
    } 

und ich habe eine Klasse IBox implementieren:

public abstract class BaseActivity implements IBox 
    { 
    @Override 
     public void onEvent(int data1, View data, Object data2) 
     { 
     //do something here 
     } 
    } 

und ich habe Klasse erweitert BaseActivity Klasse:

public class HomeBaseActivity extends BaseActivity 
{ 
    // transit Activity here, or send intent.... 
} 

Finale habe ich erweitert Klasse Haupt HomeBaseActivity:

public class HomeActivity extends HomeBaseActivity 
    { 

      @Override 
      public void onEvent(int data1, View data, Object data2) 
      { 
      switch (data1) { 
      //reciver data1 from class Rectangle 
      } 
    } 

Meine Frage:

1, warum data1 kann in der Klasse HomeActivity Reciver?

2 kann jeder Körper erklären, mir helfen? Englisch

// a haben Wurf, so dank

+0

Der von Ihnen gepostete Code funktioniert nicht, da die Variable 'onEvent' in der Klasse' Rectangle' niemals initialisiert wird. Es * könnte * Arbeit ist, wo in Ihrem realen Code ein Objekt der Klasse 'HomeActivity' zu Variable' onEvent' in der Klasse 'Rectangle' zugewiesen wird. –

+0

Sorry, aber deine Frage ist unklar; * Warum Data1 kann Empfänger * ... was meinst du damit? – GhostCat

+0

@ Timothy Truckle: sorry, ich initialisiert in contructor, aber nicht notwendig, so dass ich nicht posten, ich bearbeitet –

Antwort

0

Ich verstehe, dass Sie sich fragen, warum von onClick() in Rectangle wir Werte onEvent() in HomeActivity passieren kann und assumpting, dass Ihre Aktivität Context (jede erweitert Aktivität muss sich erweitern Context).

Lassen Sie uns hier sehen. HomeActivity erweitert HomeBaseActivity, die IBox implementiert wird. Grundsätzlich kann ein Objekt new HomeActivity() in IBox umgewandelt werden. [1]

Darüber hinaus, wie meine Annahme oben, erweitert Ihre Aktivität Context. [2]

[1] [2] => eine Instanz von HomeActivity kann IBoxContext und gegossen werden.

ist ein Objekt von HomeActivity zu Ihrem Rectangle (geworfen zu Context) passieren lassen und zu onEvent Eigenschaft zuweisen (jetzt IBox gegossen werden).

Jetzt in Ihrem onClick(), onEvent.onEvent(data1,null, data2); nur ruft einfach die onEvent() Methode, die Sie in HomeActivity implementiert. Aus diesem Grund können Sie data1 an HomeActivity übergeben.

Erfahren Sie mehr über Schnittstelle und Vererbung in Java here.

P/s: Wenn Sie Probleme beim Lesen von Englisch haben, fragen Sie einfach, ich kann Ihnen erklären, privat in Ihrer Muttersprache für diese Zeit. Versuchen Sie, Ihr Englisch zu verbessern, zumindest für alle, um Sie zu verstehen. Denn hier diskutieren wir auf Englisch.

Verwandte Themen