【问题标题】:How to get id of a view that opened a DialogFragment?如何获取打开 DialogFragment 的视图的 ID?
【发布时间】:2017-11-09 20:37:10
【问题描述】:

我向各种 EditTexts 添加了一个 onClick 方法。它会打开一个 DialogFragment。


public void eligeHora (View view){
        TimePickerFragment newFragment = new TimePickerFragment();
        newFragment.show(getFragmentManager(),"hadshads");
    }

现在,在 DialogFragment 类中,我想获取单击的编辑文本的 id(有很多)。在这个例子中,我得到了 ID 为“hora”的 EditText,但我想要它“通用”。


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),但我希望能够将此片段与具有方法 eligeHora 的所有视图一起使用em>。

【问题讨论】:

  • 你想要什么?
  • 获取打开DialogFragment的视图id

标签: java android dialogfragment


【解决方案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");
    //...
}

但请注意,从不属于FragmentFragment 中访问Views 不是一个好主意。考虑使用接口与Activity进行通信

【讨论】:

    【解决方案2】:

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

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

    此方法的View 参数是用户单击的视图。所以你可以通过在eligeHora()里面调用view.getId()来获取点击视图的id。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多