В моем приложении у меня есть этот код для расчета размера телефона и изменения RecyclerView
диспетчера макета на GridLayoutManager
или LinearLayoutManager
private void changeFeedsLayout() {
// Choose between one, two or three elements per row
if (dpWidth > 720 && getResources().getConfiguration().orientation ==
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
instagram_feeds.setLayoutManager(new GridLayoutManager(
context, 3, LinearLayoutManager.VERTICAL, false));
} else if (dpWidth > 520) {
instagram_feeds.setLayoutManager(new GridLayoutManager(
context, 2, LinearLayoutManager.VERTICAL, false));
} else {
instagram_feeds.setLayoutManager(new LinearLayoutManager(
context, LinearLayoutManager.VERTICAL, false));
}
}
этот код работает нормально, когда я присоединяю или фиксирую каждый фрагмент кконтейнер на MainActivity
, но он не работает при изменении ориентации телефона, для решения этой проблемы я использую этот код:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
changeFeedsLayout();
}
и, к сожалению, макет менеджера RecyclerView
всегда равен LinearLayoutManager
и я не могу решить это.после включения другого фрагмента и возврата к предыдущему фрагменту работает нормально.
ОБНОВЛЕНИЕ
при изменении ориентации телефона этот код как:
instagram_feeds.setLayoutManager(new LinearLayoutManager(
context, LinearLayoutManager.VERTICAL, false));
donне работает с изменением ориентации телефона по методу changeFeedsLayout()
, и этот метод не может правильно рассчитать размер телефона при изменении ориентации телефона