Kos*_*uta 26 android dialog android-fragments
想象一下,我有FragmentA,我从中启动了DialogFragment(有EditText框中).如何我能回到从价值EditText到FragmentA?我尽量让像这样,而这,但我没有成功.
mat*_*pic 75
该Fragment.onActivityResult()方法在这种情况下很有用.它需要getTargetRequestCode(),这是您在片段之间设置的代码,因此可以识别它们.另外,它需要一个请求代码,通常只是0代码运行良好,然后是一个Intent,你也可以附加一个字符串,就像这样
Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);
Run Code Online (Sandbox Code Playgroud)
此外,setTargetFragment(Fragment, requestCode)应该在发送结果的片段中使用它来识别它.总的来说,您在请求片段中的代码如下所示:
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();
Run Code Online (Sandbox Code Playgroud)
发送数据的类(DialogFragment)将使用我们刚刚定义的Fragment来发送数据:
private void sendResult(int REQUEST_CODE) {
Intent intent = new Intent();
intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
getTargetFragment().onActivityResult(
getTargetRequestCode(), REQUEST_CODE, intent);
}
Run Code Online (Sandbox Code Playgroud)
为了接收数据,我们在最初启动DialogFragment的Fragment中使用这种类:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Make sure fragment codes match up
if (requestCode == DialogFragment.REQUEST_CODE) {
String editTextString = data.getStringExtra(
DialogFragment.EDIT_TEXT_BUNDLE_KEY);
Run Code Online (Sandbox Code Playgroud)
在这一点上,你必须从你的字符串EditText从DialogFragment父片段.只需sendResult(int)在TextChangeListener()匿名类中使用该方法,以便在需要时发送文本.