You need to enable JavaScript to run this app. Android Java实现:HomeFragment向EmptyActivity内OverviewFragment传参
优惠活动
大模型
产品
解决方案
定价
更多

Android Java实现:HomeFragment向EmptyActivity内OverviewFragment传参

跨Activity的Fragment数据传递实现方案

两个Fragment分属不同Activity时,不需要直接建立通信,完整的传值链路为:HomeFragment所在的页面通过Intent将数据传给承载OverviewFragment的EmptyActivity,再由EmptyActivity将数据转发给内部的OverviewFragment即可。

核心实现步骤

  • 点击列表项时,将选中项标题通过Intent extra传递给EmptyActivity
  • EmptyActivity启动后,从自身Intent中取出携带的标题值
  • 初始化OverviewFragment时,通过setArguments()将标题值绑定到Fragment实例
  • OverviewFragment从自身的Arguments参数中取值,完成页面展示

现有代码问题修正

你当前的代码存在两个关键错误:

  1. OverviewFragment中调用的Intent.getIntent("Restaurant")并非安卓系统API,既无法编译通过,也没有获取数据的实际逻辑
  2. 让Fragment直接读取宿主Activity的Intent存在生命周期隐患,在屏幕旋转等配置变更导致Fragment重建时,容易出现空指针、数据丢失的问题

1. 修改RecyclerView适配器的点击传值逻辑

确保传入Intent的是选中项的实际标题字符串,而非列表位置id:

holder.v.setOnClickListener(v -> {
    // 取出当前选中位置的餐厅标题
    String selectedTitle = list.get(position).getName();
    Intent i = new Intent(v.getContext(), EmptyActivity.class);
    // 用固定常量作为key,避免硬编码拼写错误
    i.putExtra("EXTRA_SELECTED_TITLE", selectedTitle);
    v.getContext().startActivity(i);
});

2. 修改EmptyActivity的Fragment加载逻辑

作为承载OverviewFragment的宿主,EmptyActivity负责完成数据的中转:

public class EmptyActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_empty);

        // 取出Home页面传递的标题值
        String receivedTitle = getIntent().getStringExtra("EXTRA_SELECTED_TITLE");

        // 给OverviewFragment准备传值Bundle
        Bundle args = new Bundle();
        args.putString("FRAGMENT_TITLE_KEY", receivedTitle);

        // 初始化Fragment并绑定传值参数
        OverviewFragment fragment = new OverviewFragment();
        fragment.setArguments(args);

        // 将Fragment加载到布局容器中
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .commit();
    }
}

注意:通过setArguments()传递参数是安卓官方推荐的Fragment传值方式,这种方式可以在Fragment因配置变更重建时自动保留传递的数据,避免生命周期异常。

3. 修改OverviewFragment的取值逻辑

删除原有的错误Intent调用代码,从自身绑定的Arguments中读取数据:

public class OverviewFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_over_view, container, false);
        TextView singletitle = view.findViewById(R.id.single);

        // 从Arguments中取出传递的标题并展示
        if (getArguments() != null) {
            String title = getArguments().getString("FRAGMENT_TITLE_KEY");
            singletitle.setText(title);
        }
        return view;
    }
}

内容的提问来源于stack exchange,提问作者Madhanavel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 19:27:03