#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. не беспокойтесь, если это действительно сработает, не могли бы вы отметить это как ответ?