7

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());

デバイスが横向きまたは縦向きモードのときにアクティビティを開始すると、これは正常に機能します。しかし、このアクティビティで方向を変更すると、アクティビティが最初に開始されたときのデバイスの方向に応じて、アイテムは常に水平または垂直に描画されます。LayoutManagerデバイスの回転後にアクティビティが再作成され、正しい向きになるはずなので、これは私には意味がありません。

setOrientationデバイスの向きを変更する方法を知っている人はいますか?

4

1 に答える 1

5

これは、保存された状態が RecyclerView で復元される前に向きを設定しているためです。

Activity#onPostCreate保存された状態が方向の値を上書きしないように、方向をまたはに設定してみてくださいActivity#onResume(つまり、保存された状態が復元された後)。

更新 バージョン 21 の時点で、LLM は構成の変更時に向きを保持しないため、コードはそのまま動作するはずです。保存された状態を気にする必要はありません。

この変更が行われたのは、保存された状態が変数の状態を保存する責任があるためです。一方、向きは、作成されるたびに開発者が設定することが期待できる構成です。

于 2014-07-31T08:01:27.070 に答える