Una soluzione è semplice, è possibile rendere i campi della classe principali public
Tuttavia che la volontà rovinare il vostro codice, si dovrebbe tenere i campi privata quando possibile. Oltre al migliore completamento del codice del tuo IDE, protegge anche le classi da manipolazioni esterne illegali.
Ora il trucco per me erano le classi interne.
Una classe interna può accedere ai campi privati del suo genitore, tuttavia Java non consente di inserire una classe interna in un altro file.
Deve essere definito all'interno della classe genitore.
Questo è il punto in cui ho iniziato a scavare e ho trovato una soluzione che potrebbe essere considerata accettabile.
Se questo fa male agli esperti di java, sarei felice di non essere downvoted;)
Il trucco è creare una "classe astratta" in un proprio file java.
ho chiamato un po 'le convenzioni esterne per farlo risaltare: InnerMainActivity_onClickHandlers.java
MainActivity è la mia classe principale (il genitore della nuova classe interna)
Nel mio ParentClass ho questo campo definito, una classe interna normale, ma estendendo la nuova classe:
private class inner extends InnerMainActivity_onClickHandlers{
public inner(MainActivity mainActivity)
{
super(mainActivity);
}
};
Nel mio MainActivity.onCreate:
Button.setOnClickListener(new inner(this));
Come puoi vedere, come puoi vedere passa MainActivity (Parent) alla classe Inner.
Ora la classe interna iteself:
public abstract class InnerMainActivity_onClickHandlers implements View.OnClickListener
{
private final MainActivity main;
public InnerMainActivity_onClickHandlers(MainActivity mainActivity)
{
this.main = mainActivity;
}
@Override
public void onClick(View view)
{
// here implement the listener
}
}
per fare questo lavoro come pubblicizzato è necessario modificare le proprietà del private
MainActivity/Parent a protected
.
Ora la classe interna estesa dispone dei diritti di accesso ai campi padre, tuttavia qualsiasi classe esterna non può ancora accedervi.
In questo caso ho una classe dedicata per tutti gli ascoltatori onclick, una seconda classe potrebbe essere utilizzata per altre cose.
La domanda è stata risposta 3 anni fa già ... In che modo la tua risposta è diversa dalla risposta di 3 anni fa? – John
Onestamente non ho capito la tua risposta. Dovresti rimuovere la prima parte in cui parli di campi di classi pubbliche e classi interne. Le classi interne non hanno niente a che fare con questo –