【问题标题】:RecyclerView with start offset具有起始偏移量的 RecyclerView
【发布时间】:2016-08-02 13:04:05
【问题描述】:

我希望我在回收站视图中的第一个元素被起始列表偏移。

我尝试使用

void onCreate(Bundle savedInstanceState){
...
    linearLayoutManager.scrollToPositionWithOffset
...
}

但它不起作用。我不明白我可以使用空视图来查看列表中的零元素,但这不是完美的解决方案。

【问题讨论】:

  • 它们是两种解决方案 1) 只需使用两种类型的视图 2) 将 paddingTop 添加到您的 recyclerview,然后添加 clipToPadding false。
  • 我不明白第一个解决方案,但两个解决方案是可行的!!!非常感谢

标签: android android-recyclerview linearlayoutmanager


【解决方案1】:

第一个解决方案:

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    public static final int VIEW_HEADER = 1, VIEW_INFO = 2;
    private Context context;

    public Adapter(Context context) {
        this.context = context;
    }

    @Override
    public int getItemViewType(int position) {
        if(position == 0) return VIEW_HEADER;
        return VIEW_INFO;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType){
            case VIEW_HEADER:
                return new HeaderViewHolder(LayoutInflater.from(context).inflate(your view));
            case VIEW_INFO:
                return new InfoViewHolder(LayoutInflater.from(context).inflate(your view));
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if(holder instanceof HeaderViewHolder){

        }else if (holder instanceof InfoViewHolder){

        }
    }

    @Override
    public int getItemCount() {
        return your items count + 1; // add the header
    }

    public static class HeaderViewHolder extends RecyclerView.ViewHolder{

        public HeaderViewHolder(View itemView) {
            super(itemView);
        }
    }

    public static class InfoViewHolder extends RecyclerView.ViewHolder{

        public InfoViewHolder(View itemView) {
            super(itemView);
        }
    }
}

第二种解决方案:将paddingTop添加到你的recyclerview,并添加clipToPadding false。

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="100dp"
        android:clipToPadding="false"/>

【讨论】:

  • 我想知道你为什么隐藏第二个解决方案,它对我来说是一个非常快速的解决方案。
【解决方案2】:

我找到了一个解决方案,效果很好。首先,您需要通过以下方式获取 recyclerviews 的最后偏移值;

int offset = recyclerView.computeVerticalScrollOffset();

或者您可以分配您的偏移值。然后在你设置好你的适配器之后,你可以像下面这样设置你的偏移量。

recyclerView.setAdapter(Adapter.this);
LinearLayoutManager llm = (LinearLayoutManager) 
recyclerView.getLayoutManager();
llm.scrollToPositionWithOffset(0,-1*offset);

它的意思; llm 滚动位置到 0(开始),然后下降到偏移量。 希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2023-03-22
    • 2015-06-29
    • 2015-10-05
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多