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

如何将数据从DialogFraank发送到Fraank?

周博达
2023-03-14

我有一个片段,它打开一个对话框fragment来获取用户输入(一个字符串和一个整数)。我该如何将这两样东西送回碎片?

这是我的对话片段:

public class DatePickerFragment extends DialogFragment {
    String Month;
    int Year;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getDialog().setTitle(getString(R.string.Date_Picker));
        View v = inflater.inflate(R.layout.date_picker_dialog, container, false);

        Spinner months = (Spinner) v.findViewById(R.id.months_spinner);
        ArrayAdapter<CharSequence> monthadapter = ArrayAdapter.createFromResource(getActivity(),
                R.array.Months, R.layout.picker_row);
              months.setAdapter(monthadapter);
              months.setOnItemSelectedListener(new OnItemSelectedListener(){
                  @Override
                  public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int monthplace, long id) {
                      Month = Integer.toString(monthplace);
                  }
                  public void onNothingSelected(AdapterView<?> parent) {
                    }
              });

        Spinner years = (Spinner) v.findViewById(R.id.years_spinner);
        ArrayAdapter<CharSequence> yearadapter = ArrayAdapter.createFromResource(getActivity(),
             R.array.Years, R.layout.picker_row);
        years.setAdapter(yearadapter);
        years.setOnItemSelectedListener(new OnItemSelectedListener(){
          @Override
          public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int yearplace, long id) {
              if (yearplace == 0){
                  Year = 2012;
              }if (yearplace == 1){
                  Year = 2013;
              }if (yearplace == 2){
                  Year = 2014;
              }
          }
          public void onNothingSelected(AdapterView<?> parent) {}
        });

        Button button = (Button) v.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
               getDialog().dismiss();
            }
        });

        return v;
    }
}

我需要在单击按钮之后和getDialog()之前发送数据。Disclose()

以下是数据需要发送到的片段:

public class CalendarFragment extends Fragment {
int Year;
String Month;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int position = getArguments().getInt("position");
    String[] categories = getResources().getStringArray(R.array.categories);
    getActivity().getActionBar().setTitle(categories[position]);
    View v = inflater.inflate(R.layout.calendar_fragment_layout, container, false);    

    final Calendar c = Calendar.getInstance();
    SimpleDateFormat month_date = new SimpleDateFormat("MMMMMMMMM");
    Month = month_date.format(c.getTime());
    Year = c.get(Calendar.YEAR);

    Button button = (Button) v.findViewById(R.id.button);
    button.setText(Month + " "+ Year);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
           new DatePickerFragment().show(getFragmentManager(), "MyProgressDialog");
        }
    });
   return v;
  }
}

因此,一旦用户在Dialogfragment中选择日期,它必须返回月份和年份。

然后,按钮上的文本应更改为用户指定的月份和年份。

共有3个答案

楮自珍
2023-03-14

这里有一种方法可以说明Marcin在kotlin中实现的答案。

创建一个接口,该接口具有在dialogFragment类中传递数据的方法。

interface OnCurrencySelected{
    fun selectedCurrency(currency: Currency)
}

在dialogFragment构造函数中添加接口。

class CurrencyDialogFragment(val onCurrencySelected :OnCurrencySelected)    :DialogFragment() {}

3.现在让你的Fraank实现你刚刚创建的接口

class MyFragment : Fragment(), CurrencyDialogFragment.OnCurrencySelected {

override fun selectedCurrency(currency: Currency) {
//this method is called when you pass data back to the fragment
}}

然后,要显示dialogFragment,只需调用CurrencyDialogFragment(this)。显示(fragmentManager,“对话框”)<代码>这是您将与之对话的接口对象,用于将数据传递回片段。

5.当您想将数据发送回您的片段时,您只需调用该方法将数据传递给您传递的接口对象。

onCurrencySelected.selectedCurrency(Currency.USD)
dialog.dismiss()
潘振国
2023-03-14

这是另一个不使用任何接口的方法。只需使用setTargetFraankBundle在DialogFraank和Fraank之间传递数据。

public static final int DATEPICKER_FRAGMENT = 1; // class variable

1.调用DialogFraank,如下所示:

// create dialog fragment
DatePickerFragment dialog = new DatePickerFragment();

// optionally pass arguments to the dialog fragment
Bundle args = new Bundle();
args.putString("pickerStyle", "fancy");
dialog.setArguments(args);

// setup link back to use and display
dialog.setTargetFragment(this, DATEPICKER_FRAGMENT);
dialog.show(getFragmentManager().beginTransaction(), "MyProgressDialog")

2、在对话框片段的意图中使用额外的捆绑包,将任何信息传递回目标片段。DatePickerFragment的按钮onClick()事件中的以下代码传递字符串和整数。

Intent i = new Intent()
        .putExtra("month", getMonthString())
        .putExtra("year", getYearInt());
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i);
dismiss();

3、使用CalendarFragment的onActivityResult()方法读取值:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case DATEPICKER_FRAGMENT:
            if (resultCode == Activity.RESULT_OK) {
                Bundle bundle = data.getExtras();
                String mMonth = bundle.getString("month", Month);
                int mYear = bundle.getInt("year");
                Log.i("PICKER", "Got year=" + year + " and month=" + month + ", yay!");
            } else if (resultCode == Activity.RESULT_CANCELED) {
                ...
            }
            break;
    }
}
韦业
2023-03-14

注意:除了一两个特定于Android片段的调用之外,这是实现松散耦合组件之间数据交换的通用配方。您可以安全地使用这种方法在任何东西之间交换数据,无论是Fragments、活动、对话框还是应用程序的任何其他元素。

以下是配方:

  1. 创建包含传递数据方法签名的接口(即命名为MyContract),即methodToPassMyData(…data)
 类似资料:
  • 问题内容: 我是Rails和Web开发的新手。 我正在Matlab中生成一堆对象,我想将这些对象发送到我的Rails应用程序中的数据库中。谁能建议我该怎么做? 到目前为止,在Rails端,我已经为数据生成了基本的支架。我可以使用“ / myobjects / new”中的表单将对象添加到数据库中。 在Matlab端,我一直在尝试使用HTTP POST请求添加对象,如下所示: 这将失败,并将以下内容

  • 问题内容: 我正在做一个示例项目,其中我想将数据从iPhone发送到WatchKit。我不知道该怎么做。任何帮助将不胜感激。提前致谢 问题答案: 在AppDelegate中添加以下方法: 将此添加到Apple Watch Extension中的任何位置: 第一个函数将使用触发并回复参数中的字典。 开发人员论坛: https : //devforums.apple.com/message/10826

  • 正如大家所知,我是JavaScript和Electron的完全初学者。 我想我已经找过大多数地方了,但我什么也没找到。 IDK怎么办 有什么建议吗?

  • 问题内容: 我有一个在我和它是一个连接到。当我单击时,我想说“ 单击按钮”。 这可能吗? 我知道两个连接到同一对象的对象可以轻松地相互通信并相互发送数据。但是对象可以将数据发送到对象中吗 编写自己的程序并将其附加到程序上是更好的编程吗?然后,我可以简单地让两个片段相互发送数据。 抱歉,如果这不是StackOverflow的正确类型。我是新手,因此无法在此问题上找到清晰的解释。 提前致谢! 问题答案

  • 问题内容: 我正在使用Flask创建一个网站,并且希望能够使用页面中的数据执行python代码。我知道我可以简单地使用表单,但是它是一个页面,它在接收用户输入时会不断更新,并且每次发生任何事情时都要重新加载页面,这是一个很大的麻烦。我知道我可以在javascript内执行操作,但是如何使用js变量在javascript内执行操作?到目前为止,我唯一能想到的就是用js更新外部数据库(如MongoDB

  • 问题内容: 我想使用Android将数据发送到我的php页面。我该怎么做? 问题答案: 您可以使用AndroidHttpClient进行GET或POST请求: 创建一个AndroidHttpClient来执行您的请求。 创建一个HttpGet或HttpPost请求。 使用setEntity和setHeader]方法填充请求。 对您的请求使用客户端上的execute方法之一。