如何获取打开 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");
    //...
}

但请注意,从不属于 FragmentFragment 中访问 View 并不是一个好主意。考虑使用接口与 Activity

通信

另一个答案基本正确:您可以使用 setArguments() 将视图 ID 传递给 TimePickerFragment。它唯一缺少的部分是如何实际获取被单击的视图的 ID。

假设您在所有视图上使用 android:onClick 属性,并且每个视图都使用您的 eligeHora(View view) 方法...

此方法的View参数是用户点击的视图。因此,您可以通过在 eligeHora().

中调用 view.getId() 来获取点击视图的 ID