Вылетает исключение в методе setArguments(Bundle). Я читал другие ответы на этот вопрос. Там говорили о удалении текущего фрагмента перед тем как начать работу с новым, но я так и не понял как это сделать в моем случае. Заранее благодарю за помощь. Код MainActivity:
public class MainActivity extends AppCompatActivity implements FragmentEventListener {
FragmentTransaction transaction = null;
ArrayList<Translate> translates = new ArrayList<Translate>();
TranslatorFragment translatorFragment = TranslatorFragment.newInstance();
HistoryFragment historyFragment = HistoryFragment.newInstance();
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_translator:
transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.constraintLayoutMain, translatorFragment);
transaction.commit();
return true;
case R.id.navigation_history:
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("translations", translates);
historyFragment.setArguments(bundle);
transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.constraintLayoutMain, historyFragment);
transaction.commit();
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.constraintLayoutMain, TranslatorFragment.newInstance());
transaction.commit();
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.action_bar_layout, null);
getSupportActionBar().setCustomView(v);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#696969")));
translates.size();
}
@Override
public void setArrayListHistory(ArrayList<Translate> translates) {
for (int i = 0; i < translates.size(); i++) {
this.translates.add(0, translates.get(i));
}
}
}
Если посмотреть исходный код метода setArguments()
(Ctrl + click), то там мы увидим описание, что данный метод должен быть вызван до того, как фрагмент будет приаттачен к активити. У вас он вызывается уже после.
Вы можете изменить ваш код следующим образом: добавьте в ваш метод HistoryFragment.newInstance()
следующий код (нужно, чтобы на следующем шаге не получить NPE при обращении к аргументам):
setArguments(new Bundle());
И теперь вместо historyFragment.setArguments(bundle);
делайте
historyFragment.getArguments().putParcelableArrayList("translations", translates);
Как можно foreach (List<Tuple<int, int>> c in coords) переписать на Java?
есть класс Participant, они могут иметь идентификаторы в бд и маппятся как обычно А есть два класса Employyes и Students, они внутри имеют только Set из Participant'ов
Подскажите как подключить код, так что бы его видели все браузеры и ie9 и выше, но что бы его не видео ie8 и ниже?
Всем приветЯ новичок в сайтостроении