web-dev-qa-db-ja.com

最後の要素のRecyclerViewにマージンを追加するにはどうすればよいですか?

RecyclerViewを使用し、Fragmentの上に小さなRecyclerViewがある画面もいくつかあります。そのFragmentが表示されたら、RecyclerViewの一番下までスクロールできることを確認します。 Fragmentは常に表示されるとは限りません。 RecyclerViewでマージンを使用した場合、Fragmentが表示されたときに、マージンを動的に削除して追加する必要があります。リストの最後の項目にマージンを追加することもできますが、これも複雑で、後でさらに多くのもの(つまり、ページネーション)をロードする場合は、それらのマージンを再度取り除く必要があります。

ビューにマージンを動的に追加または削除するにはどうすればよいですか?これを解決する他のオプションは何ですか?

18
chubbsondubs

したがって、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" />
59
Reaz Murshed

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 */;
        }
    }
}
15
Francesc

これを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 ...
}
2
Radesh