android - 你如何将一个 Intent 从 Activity 传递到一个已经打开的 fragment

标签 android android-fragments

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

从 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);
}

这些是我应用的代码,但它无法正常工作。该 fragment 在开始时已经打开。

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;
}

我想要发生的是 fragment 将始终更新为我在 map 上单击的标记标签。换句话说,将字符串传递给 fragment (已打开)并更新它。

我不想使用 startActivityForResult,因为如果不使用 fragment ,我就无法在 map 上移动。有没有办法将 Activity 的结果发送到已经打开并正在运行的 fragment ?如果没有,那么我怎样才能使 fragment 从一开始就不运行(使用 supportFragmentManager)?我只知道藏起来

最佳答案

如果您正在运行 Fragment 并想将一些数据传递给它,您应该创建一些通信方式。为此,您可以使用 Observer pattern .

如果要将数据传递给 Fragment,首先在 Activity 中创建接口(interface):

public interface OnInfoClickedListener {
    void onInfoClicked(String info);
}

Fragment 中实现这个接口(interface):

@Override
public void onInfoClicked(String info) {
    infoTextView.setText(info); 
}

现在,在您的 Activity 中,创建变量来存储此接口(interface)实现:

private OnInfoClickedListener listener;

并且在实例化 Fragment 时,将其实例保存到变量中:

InfoFragment fragment = InfoFragment.newInstance();
listener = fragment;

并且在需​​要时只需通过此接口(interface)提供数据:

listener.onInfoClicked("Info - " + UUID.randomUUID());

关于android - 你如何将一个 Intent 从 Activity 传递到一个已经打开的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49067038/

相关文章:

java - 动态替换 Android fragment

android - 在不提取的情况下显示 .obb 中的图像 - Apk 扩展文件

java - 如何在更改sharedpreferences数据后自动更改android menuItem数据?

android - 是否可以使用可绘制对象制作动画?

android - DialogFragment 内的 fragment ,空白屏幕

java - 用 Fragment 替换 CardView

android - 是否有适用于 Android 的标准默认简单推送消息 JSON?

android - 未找到广告系列数据。谷歌分析

android - ViewPager - onCreateView 并不总是被调用

android - 尽管在 onDestroyView 中将父 View 设置为 null,但 fragment View 内存泄漏