首页 > 解决方案 > 无法将数据从 Activity 传递到 Fragment

问题描述

我是新手android。我想将数据从 传递activityfragment。我看到了几个问题,他们给了我一个解决方案。解决方案是通过bundle. 我从堆栈溢出中尝试了该解决方案。但不能帮助我解决这个问题。它显示Null pointer Exception. 奇怪的是每个答案都有这样的评论,指出空指针异常错误有很多赞成票。那么将数据从活动传递到片段的正确方法是什么

这是活动代码:
我使用了带有 2 个片段的底部导航栏

private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener=new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment=null;

            switch (item.getItemId())
            {
                case R.id.home_tab:

                    selectedFragment =new home_fragment();
                    Log.w("SelecetedFra", "Selfragloaded");
                    Bundle bundle = new Bundle();
                    bundle.putString("board_name", "cbse");
                    bundle.putString("class_name", "12th");
             
                    selectedFragment.setArguments(bundle);
                    break;
                case R.id.analytics_tab:
                    selectedFragment =new analytics_fragment();
                    break;
               
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
            return true;
        }
    };

片段代码:

public class home_fragment extends Fragment {

    private ViewGroup placeholder;
    String board_name;
    String class_name;
    private View view;

    public home_fragment() {
    }
    // TODO: Rename and change types and number of parameters
    public static home_fragment newInstance(String param1, String param2) {
        home_fragment fragment = new home_fragment();
        
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // In here, I am getting the data
        Bundle bundle = this.getArguments();
        Log.w("bundle ", String.valueOf(bundle));

        board_name = getArguments().getString("board_name");
        class_name = getArguments().getString("class_name");
     

        Log.w("homeFragBundle",class_name+""+board_name);

        
    }

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

}

我得到的错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

我不知道如何传递数据。每个人都建议我通过捆绑传递数据。但它给了我null pointer exception。请帮我解决一些问题。

标签: javaandroidandroid-fragmentsfragment

解决方案


我认为我在以下帖子中给其他人的答案:

分片共享数据

也可以应用于您的案例。ViewModel 范式巧妙而高效。尝试在活动和片段之间交换数据,也可以在片段与其他片段之间交换数据。


推荐阅读