具有起始偏移量的 RecyclerView
RecyclerView with start offset
我希望我在回收站视图中的第一个元素被起始列表偏移。
我尝试使用
void onCreate(Bundle savedInstanceState){
...
linearLayoutManager.scrollToPositionWithOffset
...
}
但它不起作用。我不明白我可以使用空视图如何将列表中的元素归零,但这不是完美的解决方案。
第一个解决方案:
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);
}
}
}
second solution:add 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"/>
我找到了解决方案并且效果很好。首先你需要让你的recyclerviews最后偏移值;
int offset = recyclerView.computeVerticalScrollOffset();
或者您可以指定偏移值。然后在你设置你的适配器之后,你可以像下面这样设置你的偏移量。
recyclerView.setAdapter(Adapter.this);
LinearLayoutManager llm = (LinearLayoutManager)
recyclerView.getLayoutManager();
llm.scrollToPositionWithOffset(0,-1*offset);
意思是; llm 滚动位置到 0(开始),然后向下移动到偏移量。
希望对您有所帮助!
我希望我在回收站视图中的第一个元素被起始列表偏移。
我尝试使用
void onCreate(Bundle savedInstanceState){
...
linearLayoutManager.scrollToPositionWithOffset
...
}
但它不起作用。我不明白我可以使用空视图如何将列表中的元素归零,但这不是完美的解决方案。
第一个解决方案:
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);
}
}
}
second solution:add 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"/>
我找到了解决方案并且效果很好。首先你需要让你的recyclerviews最后偏移值;
int offset = recyclerView.computeVerticalScrollOffset();
或者您可以指定偏移值。然后在你设置你的适配器之后,你可以像下面这样设置你的偏移量。
recyclerView.setAdapter(Adapter.this);
LinearLayoutManager llm = (LinearLayoutManager)
recyclerView.getLayoutManager();
llm.scrollToPositionWithOffset(0,-1*offset);
意思是; llm 滚动位置到 0(开始),然后向下移动到偏移量。 希望对您有所帮助!