我将onClick方法添加到各种EditTexts。它会打开一个DialogFragment。
public void eligeHora (View view){
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(),"hadshads");
}
现在,在DialogFragment类中我想要点击THE EditText的id(有很多)。在这个例子中,我得到了带有id" hora"的EditText,但我想要它" generic"。
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
//Create and return a new instance of TimePickerDialog
return new TimePickerDialog(getActivity(),this, 0, 0,
true);
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
//Do something with the user chosen time
//Get reference of host activity (XML Layout File) TextView widget
EditText tv = getActivity().findViewById(R.id.hora);
tv.setText(String.valueOf(hourOfDay)+ " : " +
String.valueOf(minute) + "\n");
}
}
如何获取单击视图的ID以打开DialogFragment?在示例中,我使用了特定视图的id( R.id.hora ),但我希望能够将此片段与所有具有 eligeHora方法的视图一起使用
答案 0 :(得分:1)
你可以不通过构造函数将id传递给Fragment
,而是使用静态方法:
public static TimePickerFragment instance(int viewId){
TimePickerFragment fragment = new TimePickerFragment();
Bundle b = new Bundle();
b.putInt("KEY_ID", viewId);
fragment.setArguments(b);
return fragment;
}
而不是
TimePickerFragment newFragment = new TimePickerFragment();
你必须写
TimePickerFragment newFragment = TimePickerFragment.instance(myEditTextID);
稍后,您可以像这样检索ID:
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
int id = getArguments().getInt("KEY_ID");
//...
}
但请注意,在View
内访问不属于Fragment
的{{1}} s并不是一个好主意。考虑使用界面与Fragment
答案 1 :(得分:1)
另一个答案基本上是正确的:您可以使用TimePickerFragment
将视图ID传递给setArguments()
。它唯一缺少的是如何实际获取被点击的视图的ID。
假设您在所有观看中使用android:onClick
属性,并且每个属性都使用您的eligeHora(View view)
方法......
此方法的View
参数是用户点击的视图。因此,您可以通过调用view.getId()
内的eligeHora()
来获取点击后的视图ID。