当前位置: 首页 > 知识库问答 >
问题:

从dialogfragment设置片段edittext值

呼延智明
2023-03-14

我正在尝试创建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(编辑文本)后,它将显示对话框片段(DatePickerFragment)。显示没有问题,也没有错误。

我的问题是,我怎么能设置start值后,我选择日期从我的DatePicker碎片

共有3个答案

苏高旻
2023-03-14

创建接口DateCallback

interface DateCallback{
  void onDateSet(String fDate);
}

DialogFragmentparams中获取此

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");
        }
    });
闾丘英悟
2023-03-14

有两种方法可以做到这一点:1。创建公共静态editText(不推荐,内存泄漏)。2.创建侦听器并在对话框片段中传递实例

丰胤运
2023-03-14

您需要将EditTextdata oneFragment传递到DialogFragment

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

1-on文本更改监听器

2-焦点更改监听器

3-搜索和处理它的点击

在操作传递EditText数据

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

并在DialogFragment

Bundle mArgs = getArguments();
String myValue = mArgs.getString("key");
 类似资料:
  • 问题内容: 我只是想从我在网上找到的许多android datepicker教程之一创建的datepicker对话框中获取日期。一旦选择了文本日期,我似乎在实际检索文本日期的某处出错。我有一个DatePickerFragment类,该类从嵌套在MainActivity活动类内的CreateEvent片段调用。这是DatePicker: 我知道实际尝试设置日期的时间,据我了解,这意味着它实际上无法在

  • 如您所见,当按下按钮时,main activity运行“GetFromuser”函数。我想在该函数中获取edittext值。我该怎么做呢?

  • 问题内容: 确实需要一些建议,不知道这里出了什么问题。 上下文:2个片段,每个片段都有一个Textview,主要活动有2个按钮和一个edittext 目的:在主活动的edittext框中键入hello,然后单击片段1的按钮,textview将变为hello。 问题: 在edittext中输入hello并单击按钮1时,会遇到运行时错误。 Logcat: fragment_one.xml activi

  • 我有一个包含EditText的片段,当我单击该EditText时,会出现一个DatePicker对话框来选择日期。 FragmentFile 对话框片段 问题是我不知道如何将数据(选定日期)从DialogFraank传递到片段? 我读了一些主题,但这并没有帮助我感到困惑(抱歉再次提出这个问题)。 主题1主题2

  • 想象一下,我有FragmentA,我从它开始DialogFraank(框中有)。如何将中的值取回FragmentA?我尝试制作这样的东西,但我没有成功。

  • 如果从Fragment调用,我的DialogFragment会抛出ClassCastException,而如果从Activity调用,则会正常工作。我已经看了很少的其他问题与类似的问题,基本上是与进口有关的,但我没有能够解决在我的实现。下面是我对DialogFragment的实现。 下面是我使用上面的DialogFragment的片段: 这是错误日志: 我想知道有没有人能给出一个关于这个问题的提示