我在一个Android应用程序中有两个Fragment。

这是片段A:

    public class AlertsAgentDialogFragment extends DialogFragment {
        ...
        ...
        OnDataPass dataPasser;

        public interface OnDataPass{
            public void onDataPass(String data);
        }

        ...
    }

public class AgentClickListener implements View.OnFocusChangeListener {
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus) {
                AlertsAgentDialogFragment dialog = AlertsAgentDialogFragment.newInstance(listValueSet_Agent);
                dialog.show(getActivity().getFragmentManager(),"");
            }
        }
    }


这是片段B

public class AlertsDialogFragment extends DialogFragment implements AlertsAgentDialogFragment.OnDataPass {
    ...
    ...
    public AlertsDialogFragment() {
        mContext = getActivity();
    }
    ...
    ...
    @Override
    public void onDataPass(String data) {
        // TODO Auto-generated method stub
        AlertsAgentDialogFragment transaction1 = ((AlertsAgentDialogFragment) getFragmentManager().findFragmentByTag("ItemRoleList"));
        transaction1.dataPasser.onDataPass(data);
    }
    ...
}


在片段A中,用户可以从RecycleListView中选择一个项,我希望这样,当用户选择列表的一项时,片段B可以读取此选择。

如何更改我的代码以执行此操作?

问候

最佳答案

基本思想是您不必直接将数据从一个片段传递到另一个片段。

As the documentation says,您必须将数据从一个片段传递到活动,然后活动将那些数据传递到另一片段。

这可以通过以下三个步骤实现:


定义接口
实施接口
将消息传递到片段


因此,我假设您有一个Activity,其中包含片段A和片段B。其想法是像您一样在片段A内创建接口,然后Activity必须实现该接口:

public class MyActivity extends Activity implements AlertsAgentDialogFragment.OnDataPass {
     @Override
    public void onDataPass(String data) {
        FragmentB fragment = (FragmentB)getFragmentManager().findFragmentByTag(FragmentB.FRAGMENT_TAG);
        if(fragment!=null)
            fragment.setYourString(data);
    }
}


您的FragmentB包含代表TAG的常量字符串

public static final String FRAGMENT_TAG = "fragment_b_tag";


要将标签关联到FragmentB,当您显示该片段时,需要执行以下代码:

fragment.show(getFragmentManager(), FragmentB.FRAGMENT_TAG);


而且您的FragmentB还需要实现一个方法(我称为setYourString())来管理FragmentA传递的数据。

完成之后:用于管理传递的数据的所有逻辑都在setYourString()方法中。

07-24 09:45
查看更多