其他分享
首页 > 其他分享> > android-如何更改正在运行的AlertDialog的文本

android-如何更改正在运行的AlertDialog的文本

作者:互联网

在单击从CalendarPickerFragment中选择日期的按钮后,如何更改AlertDialog上文本的当前字符串.

这是AlertDialog

    public class FragmentInicio extends Fragment{
       private static String date;

        public void addDate(){

        View view = (LayoutInflater.from(getActivity())).inflate(R.layout.alert_dialog,null);

      AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
      alertDialog.setView(view);

      final TextView date_Text = view.findViewById(R.id.dateEditText);
      final ImageButton dateButton= view.findViewById(R.id.tareaFechaButton);
      dateButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CalendarPickerFragment newFragment = new CalendarPickerFragment();
            newFragment.show(getFragmentManager(), "DatePicker");

        }
    });

      date_Text.setText(date);

      alertDialog.setTitle("New Date");
      alertDialog.setCancelable(true).setPositiveButton("Save", new 
  DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
           //Some stuff
        }
    });

    alertDialog.setNegativeButton("Cancel", new 
   DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
  Dialog dialog = alertDialog.create();
dialog.show();

}

public static void displaydate(int year, int monthOfYear, int dayOfMonth) {
    date = String.format("%02d", dayOfMonth) + "/" + String.format("%02d", monthOfYear + 1) + "/" +
            String.format("%02d", year);
    Log.d("DTAG", "date: "+date);
}

CalendarPickerFragment

public class CalendarPickerFragment extends DialogFragment implements  DatePickerDialog.OnDateSetListener {

private CalendarPickerFragment.OnDateReceiveCallBack mListener;
private Context context;

public interface OnDateReceiveCallBack {
    public void onDateReceive(int dd ,int mm, int yy);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    this.context = context;

    try {
        mListener = (CalendarPickerFragment.OnDateReceiveCallBack) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + " must implement OnDateSetListener");
    }
}

public CalendarPickerFragment(){
}



@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    final Calendar cal = Calendar.getInstance();
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(getActivity(), this, year, month, day);
}

@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
    Log.d(TAG, i + "/" + "/" + i1 + "/" + i2);
    mListener.onDateReceive(i,i1,i2);
}

解决方法:

好的,这样您就可以在AlertDialog中使用已经建立的侦听器
以下应该是您的CalendarPickerFragment

    public class CalendarPickerFragment extends DialogFragment implements  DatePickerDialog.OnDateSetListener {

        private CalendarPickerFragment.OnDateReceiveCallBack mListener;
        private Context context;

        private static CalendarPickerFragment.OnDateReceiveCallBack mListenerForAlertDialog;

        public interface OnDateReceiveCallBack {
            public void onDateReceive(int dd, int mm, int yy);
        }

        public static CalendarPickerFragment getInstance(CalendarPickerFragment.OnDateReceiveCallBack callback) {
            mListenerForAlertDialog = callback;
            return new CalendarPickerFragment();
        }

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            this.context = context;

            try {
                mListener = (CalendarPickerFragment.OnDateReceiveCallBack) context;
            } catch (ClassCastException e) {
                throw new ClassCastException(context.toString() + " must implement OnDateSetListener");
            }
        }

        public CalendarPickerFragment() {
        }


        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {

            final Calendar cal = Calendar.getInstance();
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            int day = cal.get(Calendar.DAY_OF_MONTH);

            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        @Override
        public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
            Log.d("tag", i + "/" + "/" + i1 + "/" + i2);
            mListener.onDateReceive(i, i1, i2);
            mListenerForAlertDialog.onDateReceive(i, i1, i2);
        }

    }

现在按如下所示初始化此fragmnet

CalendarPickerFragment newFragment =  CalendarPickerFragment.getInstance(new CalendarPickerFragment.OnDateReceiveCallBack() {
                @Override
                public void onDateReceive(int dd, int mm, int yy) {
                    // boom you wil get the call back on each date selection here
                    //eidtTextOfALertDialog.setText("whatEver")
                }
            });
            newFragment.show(getFragmentManager(), "DatePicker");

标签:android-alertdialog,android,android-edittext
来源: https://codeday.me/bug/20191013/1907756.html