android的setFragmentResultListener里面获取的值怎么给外部使用

    private String year="";
 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        getParentFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() {

            @Override
            public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
                // We use a String here, but any type that can be put in a Bundle is supported
                year = bundle.getString("year_select");

                // Do something with the result

                Log.d("内部监听 income year 获取:",year);


            }
        });
    }

如上代码,year正确拿到了,但是我在onCreateView里使用还是个空字符串

针对你的问题结合chatgpt知识库请参考以下内容:
onCreateView中获取到的year是空字符串,这是因为onCreateonCreateView生命周期不同步,即onCreate执行时获取到的year值还没有被设置。可以将获取到的year保存在状态变量中(比如ViewModel或者LiveData),从而能够在onCreateView中使用。举个例子:

  1. 定义一个ViewModel类,用于保存状态变量

    public class MyViewModel extends ViewModel {
        private String year;
        
        public void setYear(String year) {
            this.year = year;
        }
        
        public String getYear() {
            return year;
        }
    }
    
  2. Fragment中初始化ViewModel实例并设置year

    private MyViewModel mViewModel;
    
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        mViewModel = new ViewModelProvider(this).get(MyViewModel.class);
    
        getParentFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() {
            @Override
            public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
                String year = bundle.getString("year_select");
    
                // save year to ViewModel
                mViewModel.setYear(year);
            }
        });
    }
    
  3. onCreateView中获取year

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_my_fragment, container, false);
    
        // get year from ViewModel
        String year = mViewModel.getYear();
    
        // Use year here...
    
        return view;
    }
    

    除了使用ViewModel方案,还有其他方式可以将获取到的值传递给onCreateView方法。这里介绍一种常用的通知机制:使用回调接口。

  4. 新建回调接口OnYearSelectListener

    public interface OnYearSelectListener {
        void onYearSelected(String year);
    }
    
  5. Fragment中定义一个OnYearSelectListener类型的成员变量和一个设置回调的方法

    private OnYearSelectListener mListener;
    
    public void setOnYearSelectListener(OnYearSelectListener listener) {
        mListener = listener;
    }
    
  6. 当收到来自getParentFragmentManager().setFragmentResultListener回调时,调用OnYearSelectListener完成回调

    getParentFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() {
        @Override
        public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
            String year = bundle.getString("year_select");
            
            // invoke callback with the selected year
            if (mListener != null) {
                mListener.onYearSelected(year);
            }
        }
    });
    
  7. onCreateView里实现回调

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_my_fragment, container, false);
        
        // set listener for year selection
        setOnYearSelectListener(new OnYearSelectListener() {
            @Override
            public void onYearSelected(String year) {
                Log.d("外部** income year 获取:",year);
    
                // Do something with the selected year here...
            }
        });
    
        return view;
    }
    

以上是通过回调接口的方式将获取到的值传递给onCreateView方法。具体实现方案,可以根据实际情况进行选择。