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

如何从DialogFragment到Fragment获取数据并在娱乐活动中生存[重复]

郎宣
2023-03-14

生成的路径应该传递给片段,我通过本课中的活动使用接口来练习这一点

此解决方案工作良好,直到用户不改变设备的方向。

当设备在DialogFragment阶段或裁剪活动阶段旋转时,第一个活动和fragemnt被重新创建,并且DialogFragment的实例被销毁。所以我的回调没有运行,什么也没有发生。让我给你看代码:

设置单元活动

FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        addNewUnitFragment = new AddNewUnitFragment();
        fragmentTransaction.replace(R.id.single_unit_fragment_container,addNewUnitFragment,"myff");
        fragmentTransaction.commit();

//My callback

@Override
public void call(String string) {
    AddNewUnitFragment addNewUnitFragment = (AddNewUnitFragment)
            getFragmentManager().findFragmentById(R.id.single_unit_fragment_container);
    if(addNewUnitFragment != null) {
        addNewUnitFragment.changeFragImage(string);
    } else {

    }
}

AddNewUnitFragment

public void onClick(View v) {
    switch (v.getTag().toString()) {
        case "add_image":
            DialogImageSelect imageSelDialog = DialogImageSelect.newInstance(0);
            imageSelDialog.show(getFragmentManager(),"imageSelDialog");
            break;

...

//Function which should be called from SettingUnitActivity 

public void changeFragImage (String string) {
//Do something with string
}

对话框ImageSelect

public static interface dateCallBack {
    public abstract void call(String string);
}


static DialogImageSelect newInstance(int id) {
    DialogImageSelect di = new DialogImageSelect();
    Bundle args = new Bundle();
    args.putInt("id", id);
    di.setArguments(args);
    return di;
}


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
        callerActivity = (dateCallBack)activity;

}

//Here we take and send image path from croper activity

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

if(resultCode != Activity.RESULT_CANCELED) {
        if(requestCode == FROM_CROPPER) {
            if(data != null) {
                croppedFilePath = data.getStringExtra("filePath");
                System.out.println("CALL "+callerActivity);
                    this.callerActivity.call(croppedFilePath);
                dismiss();
            }
        }
    }
}

当设备旋转时,我如何将数据发送到保留它的片段?

UPD:本主题部分揭示了我的问题的答案,但没有说明如果活动在Rotate之后重新创建,我如何使用接口回调从DialogFragment到活动到碎片传递数据。

共有1个答案

蒯嘉赐
2023-03-14

基本上,您需要在onSaveInstanceState()方法中保存片段上的实例状态。然后在基活动的onCreate()方法中使用此保留状态。

参见:

一次,如何正确保存后堆栈中片段的实例状态?

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

  • 我有一个DialogFragment,它使用FragmentPagerAdapter来显示选项卡。每个选项卡都有一个使用RecyclerView的不同片段。我可以获取单击后传递给片段的项目,但如何才能将数据从片段获取到DialogFragment,以便将其传递给调用活动? TabDialog扩展DialogFraank: TabAdapter扩展了FragmentPagerAdapter 在Fra

  • 我想让对话框片段(DialogFragment)向我返回一个值,该值是在退出时在编辑数量(editQuantity)中输入的。 但我没有办法让它发挥作用。我可以通过将值传递给intent来实现这一点,但这会破坏当前活动的进度。 除了传递意图之外,还有什么方法可以返回我的值吗?

  • 我正在尝试将数据从DialogFraank发送到创建此对话框的Fraank。在目标片段中,我使用以下代码: 我还在fragment实现了我的接口: 在DialogFragment中,我使用以下代码: 并发送数据: 我还试图从这个问题中使用onActivityResult(): 接收数据: 但我没有收到数据:(((

  • 我的要求: 发现错误: 在这一行中..为什么值不显示在mainfragment中??

  • 我是android的初学者。我试图找到一种方法将文本从活动的editText传输到片段,以便结果显示在片段的textview中。