如何获取打开DialogFragment的视图的ID?

时间:2017-11-09 20:37:10

标签: java android dialogfragment

我将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方法的视图一起使用

2 个答案:

答案 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。