2013-08-17 7 views
7

Używam android adnotacje, staram się opisywać tej klasy tak, że mogę zapisać wartość do moich preferencji współdzielonych (adnotacji) Klasa użyciu @pref. Udało mi się znaleźć pracę z intencją i odbiornikiem transmisji, jednak nie jest to idealne i teraz, gdy chcę pobrać wartość ze wspólnych preferencji w tej klasie, aby pokazać jako domyślny element wybrany w przędzarce, zaczyna on zostaw zapach na moim kodzie.używać Android Adnotacje w niestandardowej klasy dialogowym

Czy istnieje jakiś sposób na opisywanie tej klasy?

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);  
    } 
} 

Odpowiedz

10

Obecnie nie posiadamy adnotacji o klasach Dialog. Możesz użyć w tym celu @EBean, ale kompilator wykrzykuje brakujące konstruktory.

Rozwiązaniem jest użycie DialogFragment zamiast Dialog i opisanie tej klasy za pomocą @EFragment. Poniższy kod powinien działa:

@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); 
    } 
} 

Jednak użycie @Extra na liście nie jest dobrym pomysłem. Należy: * używać listę identyfikatorów opatrzone @Extra * lub wykorzystuje setter i przekazuje tę listę do adaptera po dialog został już zainicjowany.

Mam nadzieję, że to pomoże

+0

Dzięki temu postaram się wprowadzić tę dzisiejszą noc. Dodatek to tylko element listy i był potrzebny tylko dlatego, że potrzebowałem użyć adnotacji sharedPreferences. wysłałem więc intencję, a następnie podniosłem ją w opisanej klasie, a nie świetny sposób, aby to zrobić w jakikolwiek sposób, ale działa –

+0

DialogFragment ma problem, jeśli wersja biblioteki wsparcia jest wcześniejsza od 22.2.1, więc zaktualizuj bibliotekę i problem powinien zniknąć. Ważne jest, aby pamiętać, że podczas korzystania DialogFragment cykl życia aktywność/fragment przyzwyczajenie mieć wpływ, gdy okno zostaje odrzucona, ponieważ, ponieważ jest to rzeczywiście fragment działalność ta jest obecnie na pierwszym planie, więc onResume nie zostanie wywołana, ty powinien utworzyć interfejs, który wyzwala zdarzenie w metodzie onDemsis okna dialogowego. Dzięki za pomoc! – j1c1m1b1

Powiązane problemy