【问题标题】:android - how can I know which editText was clicked in dialog fragment classandroid - 我怎么知道在对话框片段类中点击了哪个editText
【发布时间】:2013-11-19 19:09:30
【问题描述】:

我有两个 editText 视图,当用户单击第一个 editText 时,会打开一个对话框片段窗口并且用户选择日期。第二个editText也是如此。选择的日期应该在editText中“写入”。当我有一个editText时,这就像一个魅力。但是我怎么知道点击了哪个 ediText,因为它们在同一个活动中,我必须在 dialogFragment 类中编辑 editText?

我已经看到了一些其他的答案,但其中一些确实已经过时 - 已弃用,而另一些则对我没有帮助。

这是我的代码:

开始上课:

public class Start extends FragmentActivity {

private EditText ddEdit;
private EditText adEdit;
int year;
int month;
int day;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);

}

public void showDatePickerDialog(View v) {
    switch (v.getId()) {
        //i know this is not correct
    case R.id.etDepDate:
        DialogFragment depFragment = new DatePick();
        depFragment.show(getFragmentManager(), "datepicker1");
        break;
    case R.id.etArrDate:
        DialogFragment arrFragment = new DatePick();
        arrFragment.show(getFragmentManager(), "datepicker2");
        break;
    }

}

DatePick 类:

  public class DatePick extends DialogFragment implements
    DatePickerDialog.OnDateSetListener {
private EditText ddEdit;
private EditText adEdit;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, int year, int month, int day) {

            String date = new String(day + "/" + (month + 1) + "/" + year);
         //????
         //how I know here which view was clicked so I can call the editTextById method?
        //??????



}

public void editTextById(View v, String date) {

    switch (v.getId()) {
    case R.id.etDepDate:
        setDate(date, ddEdit);
        setDate(date, adEdit);
        break;

    case R.id.etArrDate:
        setDate(date, adEdit);
        break;
    }
}

public void setDate(String date, EditText editText) {
    editText.setText(date);

}

@Override
public void show(FragmentManager manager, String tag) {
    // TODO Auto-generated method stub
    super.show(manager, tag);
}
}

【问题讨论】:

    标签: android android-dialogfragment android-datepicker


    【解决方案1】:

    您可以在使用 newInstance(viewToBeEdited) 创建对话框时传递视图。
    在 showDatePickerDialog 中以这种方式修改您创建的对话框

    public void showDatePickerDialog(View v) {
        depFragment = DatePick.newInstance(v);
        depFragment.show(getFragmentManager(), "datepicker1");
        break;
    }
    

    您的 DatePick Dialog 必须实现静态方法 newInstance(Viev v)

    public class DatePick extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    
       private EditText editableView;
    
       public static DatePick newInstance(View v) {
           DatePick dialog = new DatePick();
           dialog.editableView = v;
           return dialog;
       }
    
       @Override
       public Dialog onCreateDialog(Bundle savedInstanceState) {
          <Your code>
       }
    
       public void onDateSet(DatePicker view, int year, int month, int day) {
    
            final String date = new String(day + "/" + (month + 1) + "/" + year);
            getActivity().runOnUIThread(new Runnable() {
                public run() {
                    editableView.setText(date);
                }
            });
       }
    }
    

    我没有测试它,所以可能会有一些拼写错误,但在这些情况下我通常会这样做。

    【讨论】:

    • 这就像一个魅力。非常非常感谢:)
    【解决方案2】:

    为每个编辑文本设置一个标志,并在点击()时更改标志

    【讨论】:

    • 你能举个例子吗?
    • 你知道如何设置监听器吗??
    • 我认为这不是最好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2020-12-08
    相关资源
    最近更新 更多