Android recyclerView如何在没有任何额外编码的情况下保持其滚动位置
创建了一个简单的活动,其中包含recyclerView并显示数据列表。打开设置的Android recyclerView如何在没有任何额外编码的情况下保持其滚动位置,android,android-recyclerview,android-savedstate,Android,Android Recyclerview,Android Savedstate,创建了一个简单的活动,其中包含recyclerView并显示数据列表。打开设置的“不使活动保持活动状态”并将“后台进程限制”设置为“无后台进程”。预期活动将在后台被操作系统杀死 最小化应用程序并重新打开它时,会在一个新实例上调用活动的onCreate(),并再次使用新数据列表创建一组新的recyclerView和适配器 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
“不使活动保持活动状态”
并将“后台进程限制”
设置为“无后台进程”
。预期活动将在后台被操作系统杀死
最小化应用程序并重新打开它时,会在一个新实例上调用活动的onCreate(),并再次使用新数据列表创建一组新的recyclerView和适配器
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
mRecyclerView = findViewById(R.id.recyclerView);
setSupportActionBar(toolbar);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
}
但是ui仍然在上次滚动的位置显示项目(正确还原)
有人知道以前的职位是如何转移到新的recyclerView实例的吗
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:titleTextColor="@android:color/white"
/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</LinearLayout>
这是Android为许多视图执行的默认保存状态的一部分。要启用此功能,您需要做的唯一一件事是为视图提供一个
android:id
属性(如果去掉该id,您会注意到它不再保存滚动位置)。例如,输入到编辑文本中的文本也是如此
太好了!我已经看到了一些保存滚动位置和从savedstate实例恢复的方法。
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ItemAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
mRecyclerView = findViewById(R.id. recyclerView);
setSupportActionBar(toolbar);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
}
@Override
protected void onResume() {
super.onResume();
new FetchItemASyncTask(this).execute();
// in the asyncTask it will do setup adapter when data ready
// mAdapter = new ItemAdapter(dataList)
// mRecyclerView.setAdapter(mAdapter);
}
}