2013-08-17 52 views
7

Tôi đang sử dụng chú thích Android, tôi đang cố chú thích lớp này để tôi có thể lưu giá trị vào lớp tùy chọn được chia sẻ (chú thích) bằng @pref. Tôi đã cố gắng tìm một công việc xung quanh với ý định và thiết bị phát sóng tuy nhiên điều này không lý tưởng và bây giờ tôi muốn lấy một giá trị từ các tùy chọn được chia sẻ trong lớp này để hiển thị mục mặc định được chọn trong trình quay nó bắt đầu để lại mùi trên mã của tôi.Sử dụng chú thích Android trong lớp hộp thoại tùy chỉnh

Có cách nào để chú thích lớp này không?

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

Trả lời

10

Hiện tại, chúng tôi chưa có chú thích nào cho các lớp học Dialog. Bạn có thể muốn sử dụng @EBean về điều này nhưng trình biên dịch là la hét về thiếu các nhà thầu.

Giải pháp là sử dụng DialogFragment thay vì Dialog và chú thích lớp này với @EFragment. Mã sau đây sẽ hoạt động:

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

Tuy nhiên, sử dụng @Extra trong danh sách không phải là một ý kiến ​​hay. Bạn nên: * sử dụng danh sách các id được chú thích với @Extra * hoặc sử dụng trình thiết lập và chuyển danh sách này đến bộ điều hợp của bạn sau khi hộp thoại được khởi tạo.

Hy vọng điều này sẽ giúp

+0

Cảm ơn tôi sẽ cố gắng triển khai tối nay. phần bổ sung chỉ là một mục trong danh sách và chỉ cần thiết vì tôi cần sử dụng sharedPreferences được chú thích. vì vậy tôi đã gửi một ý định và sau đó chọn nó trong lớp chú thích, không phải là một cách tuyệt vời để làm điều đó bằng bất kỳ phương tiện nhưng nó hoạt động –

+0

DialogFragment có vấn đề nếu phiên bản thư viện hỗ trợ trước 22.2.1, vì vậy hãy cập nhật thư viện và vấn đề sẽ biến mất. Điều quan trọng cần nhớ là khi bạn sử dụng DialogFragment vòng đời hoạt động/phân đoạn sẽ không bị ảnh hưởng khi hộp thoại bị loại bỏ, vì vì nó thực sự là một đoạn hoạt động hiện đang ở nền trước nên onResume sẽ không được gọi, bạn nên tạo một giao diện kích hoạt sự kiện trong phương thức onDismiss của hộp thoại. Cảm ơn đã giúp đỡ! – j1c1m1b1

Các vấn đề liên quan