2013-08-17 13 views
7

Ich benutze Android-Annotationen, ich versuche, diese Klasse zu kommentieren, so dass ich einen Wert in meine freigegebenen Einstellungen (mit Anmerkungen versehen) Klasse mit @pref speichern kann. Ich habe es geschafft, eine Arbeit mit einem Intent und einem Broadcast-Empfänger zu finden, aber das ist nicht ideal und jetzt möchte ich einen Wert aus den freigegebenen Einstellungen in dieser Klasse abrufen, um ihn als Standardelement im Spinner anzuzeigen, der gerade beginnt hinterlasse einen Geruch auf meinem Code.Verwenden Sie Android-Anmerkungen in benutzerdefinierten Dialog Klasse

Gibt es eine Möglichkeit, diese Klasse mit Anmerkungen zu versehen?

public class SelectNewsFeedDialog extends Dialog { 

    private Context context; 
    private Button confirmButton; 
    private Spinner spinnerTeams; 

    public SelectNewsFeedDialog(final Context context, ArrayList<Team> listTeams) { 
     super(context,R.style.cust_dialog); 
     this.context = context; 
     setContentView(R.layout.dialog_choose_news_feed); 
     spinnerTeams = (Spinner) findViewById(R.id.dialog_news_feed_spinner_teams); 
     confirmButton = (Button) findViewById(R.id.dialog_news_feed_button_confirm); 

     confirmButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Team team = (Team)spinnerTeams.getSelectedItem(); 
       Intent intent = new Intent(context, IntentCenter_.class); 
       intent.putExtra(context.getString(R.string.extra_update_team_news_feed), team.url.toString()); 
       intent.setAction(context.getString(R.string.action_update_team_news_feed)); 
       context.sendBroadcast(intent); 
       dismiss(); 
      } 
     }); 
     SpinnerTeamsAdapter adapter = new SpinnerTeamsAdapter(context, listTeams); 
     spinnerTeams.setAdapter(adapter);  
    } 
} 

Antwort

10

Derzeit haben wir keine Anmerkungen für Dialog Klassen. Vielleicht möchten Sie @EBean verwenden, aber der Compiler ruft fehlende Konstruktoren auf.

Die Lösung besteht darin, eine DialogFragment anstelle einer Dialog zu verwenden und diese Klasse mit @EFragment annotieren. Der folgende Code sollte funktioniert:

@EFragment(R.layout.dialog_choose_news_feed) 
public class SelectNewsFeedDialog extends DialogFragment { 

    @ViewById 
    Button confirmButton; 

    @ViewById 
    Spinner spinnerTeams; 

    @Extra 
    List<Team> listTeams; 

    @Click 
    public void confirmButtonClicked() { 
     Team team = (Team) spinnerTeams.getSelectedItem(); 
     Intent intent = new Intent(context, IntentCenter_.class); 
     intent.putExtra(context.getString(R.string.extra_update_team_news_feed), team.url.toString()); 
     intent.setAction(context.getString(R.string.action_update_team_news_feed)); 
     context.sendBroadcast(intent); 
     dismiss(); 
    } 

    @AfterViews 
    public void init() { 
     SpinnerTeamsAdapter adapter = new SpinnerTeamsAdapter(getActivity(), listTeams); 
     spinnerTeams.setAdapter(adapter); 
    } 
} 

jedoch @Extra auf einer Liste verwendet, ist keine gute Idee. Sie sollten: * eine Liste von IDs verwenden, die mit @Extra * kommentiert werden, oder verwendet einen Setter und übergibt diese Liste an Ihren Adapter, nachdem das Dialogfeld initialisiert wurde.

Hoffe, das hilft

+0

Dank Ich werde versuchen, dies heute Abend zu implementieren. das Extra ist nur ein Element der Liste und war nur notwendig, weil ich die kommentierten SharedPreferences verwenden musste. also habe ich eine Absicht gesendet und sie dann in der annotierten Klasse abgeholt, keine gute Möglichkeit, dies zu tun, aber es funktioniert –

+0

DialogFragment hat ein Problem, wenn die Support-Bibliothek älter als 22.2.1 ist, also aktualisiere die Bibliothek und Das Problem sollte verschwinden. Es ist wichtig daran zu denken, dass bei der Verwendung von DialogFragment der Aktivitäts-/Fragmentlebenszyklus nicht beeinflusst wird, wenn das Dialogfeld geschlossen wird, da die Aktivität momentan im Vordergrund ist, also onResume nicht aufgerufen wird sollte eine Schnittstelle erstellen, die ein Ereignis in der onDismiss-Methode des Dialogs auslöst. Danke für die Hilfe! – j1c1m1b1

Verwandte Themen