我在一个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()方法中。