我正在尝试创建一个 ItemDecoration,它将通过向最后一个项目动态添加填充来保持 RecyclerView 的最小高度。
要计算填充量,我需要知道所有孩子的总身高。我通过获取单个视图的高度并将其乘以适配器中的项目数来近似计算。
我遇到的问题是 view.getHeight() 并不总是返回正确的高度。通常第一次调用 getItemOffsets() 时,高度比它应该的要小得多(例如 30px 对 300px)。即使我在布局 XML 中给子视图一个固定的高度,也会发生这种情况。我猜这与测量/布局周期有关,因为我不确定如何在 ItemDecoration 中获得正确的视图尺寸。
在 getItemOffsets() 中以编程方式获取子视图高度的正确方法是什么?
项目装饰:
public class MinHeightPaddingItemDecoration extends RecyclerView.ItemDecoration {
private static final String LOG_TAG = MinHeightPaddingItemDecoration.class.getSimpleName();
private int mMinHeight;
public MinHeightPaddingItemDecoration(int minHeight) {
super();
mMinHeight = minHeight;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView recyclerView, RecyclerView.State state) {
int itemCount = state.getItemCount();
int lastPosition = itemCount - 1;
int itemPosition = recyclerView.getChildAdapterPosition(view);
int layoutPosition = recyclerView.getChildLayoutPosition(view);
// If this view …
Run Code Online (Sandbox Code Playgroud) 我有一个在启动时运行的Activity,它处理全局配置并根据当前应用程序状态确定要启动的正确Activity.由于Activity不需要任何UI,我使用的是Theme.NoDisplay,在onStart中完成我的工作,启动下一个活动并调用finish().
<activity android:name=".StartUpActivity" android:theme="@android:style/Theme.NoDisplay>
protected void onStart() {
super.onStart();
doConfiguration();
startServices();
startNextActivity();
finish();
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,直到我需要添加异步服务调用.由于在onResume()之后返回服务调用,我开始收到此错误:
An activity without a UI must call finish() before onResume() completes
Run Code Online (Sandbox Code Playgroud)