RecyclerView
を使用し、Fragment
の上に小さなRecyclerView
がある画面もいくつかあります。そのFragment
が表示されたら、RecyclerView
の一番下までスクロールできることを確認します。 Fragment
は常に表示されるとは限りません。 RecyclerView
でマージンを使用した場合、Fragment
が表示されたときに、マージンを動的に削除して追加する必要があります。リストの最後の項目にマージンを追加することもできますが、これも複雑で、後でさらに多くのもの(つまり、ページネーション)をロードする場合は、それらのマージンを再度取り除く必要があります。
ビューにマージンを動的に追加または削除するにはどうすればよいですか?これを解決する他のオプションは何ですか?
したがって、RecyclerView
の下部にパディングを追加する場合は、paddingBottom
を設定してからclipToPadding
をfalseに設定できます。ここに例があります
<Android.support.v7.widget.RecyclerView
Android:id="@+id/my_list"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clipToPadding="false"
Android:paddingBottom="100dp" />
Item Decorator を使用する必要があります。
public class MyItemDecoration extends RecyclerView.ItemDecoration {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
// only for the last one
if (parent.getChildAdapterPosition(view) == parent.getAdapter().getItemCount() - 1) {
outRect.top = /* set your margin here */;
}
}
}
これをkotlinで使用して、RecyclerView
の最後のインデックスにマージンを与えます
override fun onBindViewHolder(holder: RecyclerView.ViewHolder(view), position: Int) {
if (position == itemsList.lastIndex){
val params = holder.itemView.layoutParams as FrameLayout.LayoutParams
params.bottomMargin = 100
holder.itemView.layoutParams = params
}else{
val params = holder.itemView.layoutParams as RecyclerView.LayoutParams
params.bottomMargin = 0
holder.itemView.layoutParams = params
}
//other codes ...
}