You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Android Fragment中onActivityCreated方法被废弃的问题

解决方案

onActivityCreated从AndroidX Fragment 1.3.0版本开始正式废弃,官方弃用的核心原因是该方法过度耦合宿主Activity的生命周期,容易导致时序逻辑混乱、出现不可预期的崩溃。

推荐替换方案

  • 绝大多数场景下,你原本写在onActivityCreated中的逻辑(比如视图初始化、适配器绑定等和Fragment自身视图相关的操作),直接迁移到onViewCreated方法中即可。该方法在onCreateView执行完成、视图已经实例化完成后自动回调,完全可以覆盖原有使用场景。
  • 如果你的逻辑确实强依赖宿主Activity完成onCreate生命周期后才能执行,可以通过给宿主Activity的生命周期添加观察者实现。
  • 如果你暂时不想迁移代码,也可以在onActivityCreated方法上方添加@SuppressWarnings("deprecation")注解忽略警告,但该方法后续可能被彻底移除,还是建议尽快迁移到新的实现方式。

修改后的代码示例

package example.com.fragmentrecycler;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * A simple {@link Fragment} subclass.
 */
public class ListFrag extends Fragment {
    RecyclerView recyclerView;
    RecyclerView.Adapter myAdapter;
    RecyclerView.LayoutManager layoutManager;
    View view;

    public ListFrag() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_list, container, false);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 原本写在onActivityCreated里的逻辑直接放这里,比如RecyclerView初始化
        recyclerView = view.findViewById(R.id.recycler_view);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        // 此处替换为你自己的适配器初始化逻辑
        // myAdapter = new XXXAdapter();
        recyclerView.setAdapter(myAdapter);

        // 如果你确实需要等Activity创建完成再执行的逻辑,加下面这段即可,普通场景不需要
        if (getActivity() != null) {
            getActivity().getLifecycle().addObserver(new LifecycleObserver() {
                @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
                void onActivityCreated() {
                    // 要依赖Activity创建完成的逻辑放这里
                    getActivity().getLifecycle().removeObserver(this);
                }
            });
        }
    }

    public void notifyDataChanged()
    {
        myAdapter.notifyDataSetChanged();
    }

}

修改完成后删除原有onActivityCreated重写方法,废弃提示就会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:33:03