如何获取打开 DialogFragment 的视图的 ID?
How to get id of a view that opened a DialogFragment?
我为各种 EditText 添加了一个 onClick 方法。它打开一个 DialogFragment。
public void eligeHora (View view){
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(),"hadshads");
}
现在,在 DialogFragment 中 class 我想获取点击的 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");
}
}
如何获取点击打开DialogFragment的视图的id?在示例中,我使用了特定视图的 ID (R.id.hora),但我希望能够将此片段与具有方法 [=18] 的所有视图一起使用=]eligeHora.
您可以将 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");
//...
}
但请注意,从不属于 Fragment
的 Fragment
中访问 View
并不是一个好主意。考虑使用接口与 Activity
通信
另一个答案基本正确:您可以使用 setArguments()
将视图 ID 传递给 TimePickerFragment
。它唯一缺少的部分是如何实际获取被单击的视图的 ID。
假设您在所有视图上使用 android:onClick
属性,并且每个视图都使用您的 eligeHora(View view)
方法...
此方法的View
参数是用户点击的视图。因此,您可以通过在 eligeHora()
.
中调用 view.getId()
来获取点击视图的 ID
我为各种 EditText 添加了一个 onClick 方法。它打开一个 DialogFragment。
public void eligeHora (View view){
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(),"hadshads");
}
现在,在 DialogFragment 中 class 我想获取点击的 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");
}
}
如何获取点击打开DialogFragment的视图的id?在示例中,我使用了特定视图的 ID (R.id.hora),但我希望能够将此片段与具有方法 [=18] 的所有视图一起使用=]eligeHora.
您可以将 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");
//...
}
但请注意,从不属于 Fragment
的 Fragment
中访问 View
并不是一个好主意。考虑使用接口与 Activity
另一个答案基本正确:您可以使用 setArguments()
将视图 ID 传递给 TimePickerFragment
。它唯一缺少的部分是如何实际获取被单击的视图的 ID。
假设您在所有视图上使用 android:onClick
属性,并且每个视图都使用您的 eligeHora(View view)
方法...
此方法的View
参数是用户点击的视图。因此,您可以通过在 eligeHora()
.
view.getId()
来获取点击视图的 ID