2013-06-27 32 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它是片段的片段不为空, 答对了!!!