2013-06-27 38 views
2

我使用創建TimePicker本手冊http://developer.android.com/guide/topics/ui/controls/pickers.htmlDialogFragment顯示與標籤不正常工作

public class TimePickerFragment extends DialogFragment { 

    private TimePickerDialog.OnTimeSetListener mListener; 
    private Activity mActivity; 
    private Calendar mCalendar = Calendar.getInstance(); 

    public TimePickerFragment(Activity a,TimePickerDialog.OnTimeSetListener listener) { 
     mListener = listener; 
     mActivity = a; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     int hour = mCalendar.get(Calendar.HOUR_OF_DAY); 
     int minute = mCalendar.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(mActivity, mListener, hour, minute, 
       DateFormat.is24HourFormat(mActivity)); 
    } 
} 

我想這種方式顯示此對話框與標籤

public class SomeActivity extends FragmentActivity implements TimePickerDialog.OnTimeSetListener { 
    TimePickerFragment mTimePicker; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.some_view); 

     mTimePicker = new TimePickerFragment(this, this); 

     // calling show with "SOME_TAG" tag 
     mTimePicker.show(this.getSupportFragmentManager(), "SOME_TAG"); 
    } 

    @Override 
    public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) { 
     // Here tag is null ?! 
     // Why? 
     String tag = (String) timePicker.getTag(); 
    } 
} 

但在onTimeSet方法,標記始終爲空。爲什麼?

回答

0

您需要使用setTag()方法將對象設置爲標籤,然後再檢索它,而您在發佈的代碼中沒有執行任何操作。

直到調用setTag()時,getTag()將始終返回null。

+2

DialogFragment沒有setTag()方法。但show()方法簽名具有標籤參數。顯示(FragmentManager管理器,字符串標籤) – Hepri

+0

@Hepri TimePicker。 –

5

你可以簡單地通過getTag獲取標記()函數

public static class DatePickerCustom extends DialogFragment implements 
      DatePickerDialog.OnDateSetListener { 
     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      final Calendar calendar = Calendar.getInstance(); 
      int yy = calendar.get(Calendar.YEAR); 
      int mm = calendar.get(Calendar.MONTH); 
      int dd = calendar.get(Calendar.DAY_OF_MONTH); 
      return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
     } 

     public void onDateSet(DatePicker view, int yy, int mm, int dd) { 

       String mytag=getTag(); 

     } 
    } 
1

我知道它的一晚答覆,但我最近去通過相同的條件。所以這裏是我的回答,

DialogFragment.Show(FragmentManager manager, String tag)方法是爲片段本身設置標記。所以這種標籤可以使用如下:

Fragment dateTo=getActivity().getSupportFragmentManager().findFragmentByTag("dateTo"); 
      if(dateTo!=null){ 
       //do something 

      } 

一個使用案例是,你可以在一個活動顯示一個以上的片段,並確定你可以找到與給定tag.If它是片段的片段不爲空, 答對了!!!