如何将活动中的意图传递给已打开的片段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将活动中的意图传递给已打开的片段相关的知识,希望对你有一定的参考价值。
这是我从其他主题得到的答案,并将其应用于我的代码:
从活动中您可以按意图发送数据:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
并在Fragment onCreateView方法中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false);
}
这些是我应用的代码,它不能以某种方式工作。该片段在开始时已经打开。
public void onInfoWindowClick(Marker marker) {
if (tag.equals("Click to show all routes in this point")) {
Bundle bundle = new Bundle();
bundle.putString("route1", "Divisoria - San Juan");
// set Fragmentclass Arguments
hideShowFragment fragobj = new hideShowFragment();
fragobj.setArguments(bundle);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
Fragment intersectionFragment = manager.findFragmentById(R.id.fragmentContainer2);
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
ft.add(R.id.fragmentContainer2, fragobj);
ft.show(intersectionFragment);
ft.commit();
}
}
我的onCreateView方法中的代码:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_hide_show, container, false);
if (!routes.equals(none)) {
routes = getArguments().getString("route1");
} else {
routes = "Food";
}
return view;
}
我想要发生的是片段将始终更新为我在地图上单击的标记标记。换句话说,将字符串传递给片段(已打开)并更新它。
我不想使用startActivityForResult,因为如果我不使用片段,我就无法在地图上移动。有没有办法将活动结果发送到已经打开并运行的片段?如果没有,那么如何让片段从一开始就不运行(使用supportFragmentManager)?我只知道要隐藏它
答案
如果你已经运行Fragment
并想要传递一些数据,你应该创建一些通信方式。为此,您可以使用Observer pattern。
首先,如果要将数据传递给Activity
,请在Fragment
中创建接口:
public interface OnInfoClickedListener {
void onInfoClicked(String info);
}
在Fragment
中实现此接口:
@Override
public void onInfoClicked(String info) {
infoTextView.setText(info);
}
现在,在Activity
中,创建变量来存储此接口实现:
private OnInfoClickedListener listener;
在实例化Fragment
时,将其实例保存到变量:
InfoFragment fragment = InfoFragment.newInstance();
listener = fragment;
当需要时,只需通过此界面提供数据:
listener.onInfoClicked("Info - " + UUID.randomUUID());
以上是关于如何将活动中的意图传递给已打开的片段的主要内容,如果未能解决你的问题,请参考以下文章