电话轮换后,LinearLayoutManager setOrientation无法正常工作

Jor*_*ris 7 android android-recyclerview

我想出来的新RecyclerView联合标准执行LayoutManagerLinearLayoutManager.我的目标是LayoutManager当设备处于纵向时让我的项目水平绘制,并在设备处于横向时垂直绘制它们.为此我在我的活动中使用以下代码onCreate:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.nextColors);
recyclerView.setAdapter(myAdapter = new MyAdapter(getBaseContext(), myData, myLayout);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
   linearLayoutManager.setOrientation(LinearLayout.HORIZONTAL);
} else {
    linearLayoutManager.setOrientation(LinearLayout.VERTICAL);
}
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
Run Code Online (Sandbox Code Playgroud)

如果我在设备处于横向或纵向模式时启动活动,则此工作正常.但是,当我在此活动中更改方向时,项目始终水平或垂直绘制,具体取决于首次启动活动时设备的方向.这对我来说没有意义,因为在设备旋转之后,活动被重新创建并且LayoutManager应该采取正确的方向.

有没有人知道如何使setOrientation设备方向更改?

yig*_*git 5

这是因为您在RecyclerView中恢复已保存状态之前设置方向.

尝试设置方向Activity#onPostCreateActivity#onResume(换句话说,在保存状态恢复后),以便保存的状态不会覆盖您的方向值.

更新 从版本21开始,LLM不会保留配置更改的方向,因此您的代码应该按原样运行.您不需要关心已保存的状态.

进行此更改是因为保存状态应负责保存变量状态,而orientation是我们可以期望开发人员在每次创建时设置的配置.