簡體   English   中英

如何將意圖從活動傳遞到已經打開的片段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM