2013-08-17 8 views
7

アンドロイドアノテーションを使用しています。このクラスに注釈を付けると、@prefを使用して共有プリファレンス(注釈付き)クラスに値を保存できます。私はインテントとブロードキャストレシーバを使って回避策を見つけることができましたが、これは理想的ではなく、このクラスの共有プリファレンスから値を取り出して、スピナーに選択されている既定のアイテムとして表示したい私のコードに匂いを残す。カスタムダイアログクラスでAndroidアノテーションを使用する

このクラスに注釈を付ける方法はありますか?

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

答えて

10

現在、Dialogクラスの注釈はありません。これには@EBeanを使いたいかもしれませんが、コンパイラはコンストラクタが見つからないと叫んでいます。

解決策はDialogの代わりにDialogFragmentを使用し、このクラスに@EFragmentと注釈を付けることです。次のコードは動作しますする必要があります

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

はしかし、リスト上の@Extraを使用することは良いアイデアではありません。 * @Extra*と注釈を付けられたIDのリストを使用するか、セッターを使用してダイアログを初期化した後にこのリストをアダプターに渡します。

希望します。

+0

ありがとう、私は今夜これを実装しようとします。 余分なものはリストの単なる項目であり、注釈付きのsharedPreferencesを使用する必要があったために必要でした。だから私は意図を送って、それをアノテートされたクラスで拾い上げました。どんな手段でもそれを実行する素晴らしい方法ではありませんでした。 –

+0

サポートライブラリのバージョンが22.2.1より前であればDialogFragmentに問題があります。問題は消えるはずです。 DialogFragmentを使用するときは、ダイアログが閉じられたときにアクティビティ/フラグメントライフサイクルが影響を受けることはありません。これは実際にフラグメントがフォアグラウンドにあるため、onResumeは呼び出されないため、ダイアログのonDismissメソッドでイベントをトリガするインターフェイスを作成する必要があります。助けてくれてありがとう! – j1c1m1b1

関連する問題