【问题标题】:Experiencing a problem while using childFragmentManager使用 childFragmentManager 时遇到问题
【发布时间】:2022-08-14 22:53:11
【问题描述】:

然后我使用 childFragmentManager

java.lang.Classjava.lang.Object.getClass()

有这个错误

这是我的第一个片段代码,我有四个子片段。

public class Main2Fragment extends Fragment {

    Main2Season main2Season;
    Main2Festival main2Festival;
    Main2Local main2Local;
    Main2Parking main2Parking;


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

        view.findViewById(R.id.season).setOnClickListener(mListener);
        view.findViewById(R.id.festival).setOnClickListener(mListener);
        view.findViewById(R.id.local).setOnClickListener(mListener);
        view.findViewById(R.id.parking).setOnClickListener(mListener);


        return  view;
    }


    private final View.OnClickListener mListener = new View.OnClickListener() {
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.season:
                    getChildFragmentManager().beginTransaction().replace(R.id.frag_container, main2Season).commit();
                    break;
                case R.id.festival:
                    getChildFragmentManager().beginTransaction().replace(R.id.frag_container, main2Festival).commit();
                    break;
                case R.id.local:
                    getChildFragmentManager().beginTransaction().replace(R.id.frag_container, main2Local).commit();
                    break;
                case R.id.parking:
                    getChildFragmentManager().beginTransaction().replace(R.id.frag_container, main2Parking).commit();
                    break;
            }
        }
    };

错误信息是:

Process: com.example.bermuda, PID: 14194
    java.lang.NullPointerException: Attempt to invoke virtual method \'java.lang.Class java.lang.Object.getClass()\' on a null object reference

    标签: java android xml


    【解决方案1】:

    问题是,您没有实例化您的子片段。将您的代码更改为:

    private final View.OnClickListener mListener = new View.OnClickListener() {
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.season:
                        getChildFragmentManager().beginTransaction().replace(R.id.frag_container, Main2Season()).commit();
                        break;
                    case R.id.festival:
                        getChildFragmentManager().beginTransaction().replace(R.id.frag_container, Main2Festival()).commit();
                        break;
                    case R.id.local:
                        getChildFragmentManager().beginTransaction().replace(R.id.frag_container, Main2Local()).commit();
                        break;
                    case R.id.parking:
                        getChildFragmentManager().beginTransaction().replace(R.id.frag_container, Main2Parking()).commit();
                        break;
                }
            }
        };
    

    【讨论】:

    • 非常感谢 !!!!你的回答让我很开心
    【解决方案2】:

    这里的问题很清楚,首先你需要知道NullPointerException 是什么。

    是正常的,因为您要声明:

    Main2Season main2Season;
    Main2Festival main2Festival;
    Main2Local main2Local;
    Main2Parking main2Parking;
    

    然后在不初始化它们的情况下使用:

    getChildFragmentManager().beginTransaction().replace(R.id.frag_container, main2Season).commit();
    

    所以不管你按下哪个按钮,它们都会失败。

    所以你需要在使用它们之前初始化它们。

    例如你可以这样做:

    getChildFragmentManager().beginTransaction().replace(R.id.frag_container, Main2Season()).commit();
    

    【讨论】:

    • 先生非常感谢您.. !!我真的很高兴 :) 我使用你的代码,但是 android studio 像这样修复 getChildFragmentManager().beginTransaction().replace(R.id.frag_container, new Main2Season()).commit();并成功:)谢谢
    • 先生,我还有一个问题。听说我没有初始化就使用了,但是如果我在初始化之后使用它,我的方法是否正确?
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 2021-11-08
    • 2014-01-08
    • 2011-03-09
    • 2013-01-30
    • 2016-11-13
    • 2016-07-21
    相关资源
    最近更新 更多