[英]How do you pass an intent from activity to a fragment that is already opened
這是我從其他主題獲得的答案並將其應用於我的代碼:
從 Activity 發送數據的目的是:
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;
}
我想要發生的是片段將始終更新為我在地圖上單擊的標記 Tag。 換句話說,將字符串傳遞給片段(即打開的)並更新它。
我不想使用 startActivityForResult 因為如果我不使用片段我就不能在地圖上移動。 有沒有辦法將結果從活動發送到已經打開並運行的片段? 如果沒有,那么我怎樣才能讓片段從一開始就不運行(使用 supportFragmentManager)? 我只知道是隱藏它
如果您已運行Fragment
並希望將一些數據傳遞給它,您應該創建某種通信方式。 為此,您可以使用觀察者模式。
如果要將數據傳遞給Fragment
首先在Activity
創建接口:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.