我从这里学到了如何防止方向改变时重启 How to avoid restarting activity when orientation changes on Android
因此,我实现了它
在清单中,我确保旋转不会触发重启
android:configChanges="keyboardHidden|orientation|screenSize"
我的布局很简单
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list_of_items"/>
</ScrollView>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/add"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
在我的MainActivity中设置
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_main);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView itemsView = findViewById(R.id.list_of_items);
itemsView.setLayoutManager(new LinearLayoutManager(this));
itemsView.setNestedScrollingEnabled(false);
ItemsAdapter items = new ItemsAdapter(this);
itemsView.setAdapter(items);
}
每当发生旋转时,我都会在onConfigurationChanged
内检查项目计数和可见性状态,并记录日志显示回收者视图可见并且包含x个项目,但是以某种方式旋转时,它永远不会显示这些项目。我想念什么?我的ItemsAdapter是一个非常简单的适配器,里面没有花哨的东西。
答案 0 :(得分:1)
通过在setContentView(R.layout.activity_main)
中使用onConfigurationChanged()
,基本上每次设备旋转时都会创建新视图。但是,对于在onCreate()
中找到的视图,只需设置一次适配器。从onConfigurationChanged()
删除此行应该可以解决您的问题。
顺便说一句,很可能您需要ScrollView,RecyclerView会处理它自己的滚动。