无法将数据从 Activity 传递到片段

Unable to pass data from Activity to fragment

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

的正确方法是什么

这是Activity代码:
我使用了带有 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

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

我觉得我给别人的答案在下面post:

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

我在我的一个项目中也遇到过此类问题。我使用另一种方法将数据从 activity 传递到片段而不使用 bundle.

将包值分配给 Activity 中的变量并使其成为 public。

public String board_name = "cbse"
public String class_name = "12th"

现在在片段方面,

像下面这样调用变量并将其分配给片段中的字符串

YourActivityName myActivity = (YourActivityName) getActivity();
board_name = myActivity.board_name;
class_name = myActivity.class_name;

现在您可以获取值并将它们用于片段中的进一步处理。