【发布时间】:2020-06-01 16:36:51
【问题描述】:
我创建了一个 recyclerview 网格,一旦用户按下按钮,就会填充来自 api 的数据。旋转屏幕后,滚动位置会短暂恢复,然后再向上滚动到网格顶部。我正在使用这个tutorial 来保留我的滚动位置:
class MainActivity : AppCompatActivity(), Main.View {
private lateinit var carAdapter: CarAdapter
private lateinit var presenter: Main.MainPresenter
private lateinit var cars: ArrayList<Car?>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
carsAdapter = CarsAdapter(mutableListOf())
// line suggested by androiddevelopers article
carsAdapter.stateRestorationPolicy =
RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
gridRV.layoutManager = GridLayoutManager(this, 3)
gridRV.adapter = carsAdapter
if (savedInstanceState != null) {
cars = savedInstanceState.getParcelableArrayList<Car?>(CARS_ARG)
as ArrayList<Car?>
carsAdapter.cars = cars
carsAdapter.notifyDataSetChanged()
}
presenter = Main.MainPresenter(this, CarService(R.string.api_ul))
search_button.setOnClickListener { presenter.onSearchClick() }
}
// presenter.onSearchClick() calls this
override fun displayGrid() {
this.cars = cars
carsAdapter.cars = cars
carsAdapter.notifyDataSetChanged()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putParcelableArrayList(CARS_ARG, cars)
}
}
我还尝试将布局状态保存在此 tutorial 中。
我的清单条目是:
<activity
android:name=".main.MainActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【问题讨论】:
标签: android android-recyclerview