代码之家  ›  专栏  ›  技术社区  ›  YVS1102

从dialogfragment设置片段edittext值

  •  2
  • YVS1102  · 技术社区  · 8 年前

    我正在尝试创建searchdate。我在这里做的是 RijekSearch.java

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_rijek_search, container, false);
        EditText start = (EditText) v.findViewById(R.id.startdateval);
    
        start.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                FragmentManager fm = getFragmentManager();
                DatePickerFragment myDialogFragment = new DatePickerFragment();
                myDialogFragment.show(fm, "dialog_fragment");
            }
        });
        return v;
    }
    

    这里是 DatePickerFragment

    public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
            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);
    
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        @Override
        public void onDateSet(DatePicker view, int year, int month, int day) {
            Calendar c = Calendar.getInstance();
            c.set(year, month, day);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String formattedDate = sdf.format(c.getTime());
    
    
            Fragment fr =   new RijekSearch();
            FragmentManager fm=getFragmentManager();
            FragmentTransaction ft=fm.beginTransaction();
            Bundle args = new Bundle();
            args.putString("startval", formattedDate);
            fr.setArguments(args);
            ft.replace(R.id.content_frame, fr);
            ft.commit();
    
        }
    }
    

    所以首先,我打开 RijekSearch 这是一个片段。然后单击 start (编辑文本)将显示 dialogfragment (DatePickerFragment)。显示没有问题,也没有错误。

    我的问题是,如何设置 开始 从中选择日期后的值 DatePickerFragment ?

    3 回复  |  直到 8 年前
        1
  •  0
  •   Adil    8 年前

    你需要通过 EditText 数据一 Fragment DialogFragment

    首先删除此 start.setOnClickListener() 您可以使用这些

    1 - on Text Change Listener

    2 - FocusChangeListener

    3 - Search and handle its click

    行动通行证 编辑文本 数据

    Bundle args = new Bundle();
    args.putString("key", "value");
    DialogFragment newFragment = new YourDialogFragment();  
    newFragment.setArguments(args);
    newFragment.show(getSupportFragmentManager(), "TAG");
    

    并获得价值 对话框片段

    Bundle mArgs = getArguments();
    String myValue = mArgs.getString("key");
    
        2
  •  0
  •   KKSINGLA    8 年前

    有两种方法: 1、创建公共静态editText(不推荐,内存泄漏)。 2、创建监听器并在对话框片段中传递实例。

        3
  •  0
  •   Rajan Kali    8 年前

    创建接口 DateCallback

    interface DateCallback{
      void onDateSet(String fDate);
    }
    

    获取此信息 DialogFragment 参数

    public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    
        private static DataCallback dataCallback;
    
        public static DatePickerFragment  newInstance(DataCallback dataCallback){
          this.dataCallback = dataCallback;
         return new DatePickerFragment();
        }
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
            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);
    
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }
    
        @Override
        public void onDateSet(DatePicker view, int year, int month, int day) {
            Calendar c = Calendar.getInstance();
            c.set(year, month, day);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String formattedDate = sdf.format(c.getTime());
            FragmentManager fm=getFragmentManager();
            dataCallback.onDateSet(formattedDate);
            fm.popBackStack();
        }
    }
    

    现在在你的RijekSearch

    start.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                FragmentManager fm = getFragmentManager();
                DatePickerFragment myDialogFragment = DatePickerFragment.newInstance(new DateCallback(){
                      @Override
                      public void onDateSet(String fDate){
                         start.setText(fDate);
                      }
                });
                myDialogFragment.show(fm, "dialog_fragment");
            }
        });