В моем коде getArgument каждый раз возвращает значение null

#java #android #android-studio

#java #Android #android-studio

Вопрос:

Я перепробовал все без исключения типы решений, но метод fragment get argument всегда возвращает null.

Это мой фрагмент кода.

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_main_activity, container, false);
       
        **String data1 = getArguments().getString("data");
        Toast.makeText(getActivity(), getArgument1, Toast.LENGTH_SHORT).show();**
}
 

В приведенном выше коде data1 всегда возвращает null.
Это мой основной код действия.

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     
        chipNavigationBar = findViewById(R.id.bottomNavBar);
        chipNavigationBar.setItemSelected(R.id.home, true);
        getSupportFragmentManager().beginTransaction().replace(R.id.container1, new mainActivityFragment()).commit();

        chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() {
            @Override
            public void onItemSelected(int i) {
                Fragment fragment = null;
                switch (i) {
                    case R.id.home:

                        **fragment = new mainActivityFragment();
                        Bundle bundle = new Bundle();
                        bundle.putString("data","anything");
                        fragment.setArguments(bundle);**

                        break;
                    case R.id.menu:
                        fragment = new menuFragment();
                        break;

                    case R.id.corona:
                        fragment = new CoronaFragment();
                        break;
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.container1, fragment).commit();
            }
        });

    }
 

Комментарии:

1. Это data1 и getArgument1 есть одно и то же?

2. chipNavigationBar.setOnItemSelectedListener Был вызван?

3. да, data1 и getArgument1 являются одинаковыми, и да, был вызван chipNavigationBar.

Ответ №1:

Я обеспокоен тем, что есть 2 места, которые вы загружаете mainActivityFragment() — первое по умолчанию, когда нет аргументов связки, и второй раз, когда chipNavigationBar. setOnItemSelectedListener вызывается. Может быть, попробуйте что-то вроде этого:

 static mainActivityFragment createMainActivityFragment() {
    mainActivityFragment fragment = new mainActivityFragment();
    Bundle bundle = new Bundle();
    bundle.putString("data","anything");
    fragment.setArguments(bundle);
    return fragment;
}

//IN ONCREATE:
    getSupportFragmentManager().beginTransaction().replace(R.id.container1, mainActivityFragment.createMainActivityFragment()).commit();

//IN THE SWITCH
    case R.id.home:
        fragment = mainActivityFragment.createMainActivityFragment()
    break;
 

Тогда оба экземпляра должны иметь пакет

Комментарии:

1. Извините, если в моей java есть ошибки, я так привык к Kotlin

2. не беспокойтесь, если это действительно сработает, не могли бы вы отметить это как ответ?