如何将活动中的意图传递给已打开的片段

时间:2018-03-02 10:15:14

标签: android android-fragments

这是我从其他主题得到的答案并将其应用于我的代码:

从活动中您按意图发送数据:

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)?我只知道是隐藏它

1 个答案:

答案 0 :(得分:1)

如果您已经运行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());