在自定义对话框类中使用Android注释

时间:2013-08-17 14:51:20

标签: android android-annotations

我正在使用android注释,我正在尝试注释这个类,以便我可以使用@pref将值保存到我的共享首选项(带注释)类中。我已经设法找到了一个有意图和广播接收器的工作但是这不是理想的,现在我想从这个类中的共享首选项中获取一个值,以显示在微调器中选择的默认项目它开始给我的代码留下气味。

有没有办法注释这个课程?

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

1 个答案:

答案 0 :(得分:10)

目前,我们没有Dialog类的任何注释。您可能希望在此使用@EBean,但编译器对缺少的构造函数大喊大叫。

解决方案是使用DialogFragment代替Dialog,并使用@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列表 *或者,使用setter并在初始化对话框后将此列表传递给适配器。

希望这有帮助