androidx.recyclerview.widget.RecyclerView#LayoutManager ( )源码实例Demo

下面列出了androidx.recyclerview.widget.RecyclerView#LayoutManager ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: Mysplash   文件: GridMarginsItemDecoration.java
public GridMarginsItemDecoration(RecyclerView recyclerView,
                                 int gridMargins, int singleSpanMargins,
                                 int gridCardRadius, int singleSpanCardRadius) {
    this.gridMargins = gridMargins;
    this.singleSpanMargins = singleSpanMargins;
    this.gridCardRadius = gridCardRadius;
    this.singleSpanCardRadius = singleSpanCardRadius;

    RecyclerView.LayoutManager layoutManager = getLayoutManager(recyclerView);
    if (layoutManager instanceof StaggeredGridLayoutManager) {
        singleSpan = ((StaggeredGridLayoutManager) layoutManager).getSpanCount() == 1;
    } else if (layoutManager instanceof GridLayoutManager) {
        singleSpan = ((GridLayoutManager) layoutManager).getSpanCount() == 1;
    } else if (layoutManager instanceof LinearLayoutManager) { // linear layout manager.
        singleSpan = true;
    } else if (MysplashApplication.isDebug(recyclerView.getContext())) {
        throw new RuntimeException("Null layout manager.");
    } else {
        singleSpan = false;
    }
    setParentPadding(
            recyclerView,
            (singleSpan ? singleSpanMargins : gridMargins) / 2,
            getWindowInset(recyclerView)
    );
}
 
源代码2 项目: FlexibleAdapter   文件: FlexibleLayoutManager.java
/**
 * Helper method to find the adapter position of the <b>last partially</b> visible view
 * [for each span], no matter which Layout is.
 *
 * @return the adapter position of the <b>last partially</b> visible item or {@code RecyclerView.NO_POSITION}
 * if there aren't any visible items.
 * @see #findLastCompletelyVisibleItemPosition()
 * @since 5.0.0-rc1
 */
@Override
public int findLastVisibleItemPosition() {
    RecyclerView.LayoutManager layoutManager = getLayoutManager();
    if (layoutManager instanceof StaggeredGridLayoutManager) {
        StaggeredGridLayoutManager staggeredGLM = (StaggeredGridLayoutManager) layoutManager;
        int position = staggeredGLM.findLastVisibleItemPositions(null)[0];
        for (int i = 1; i < getSpanCount(); i++) {
            int nextPosition = staggeredGLM.findLastVisibleItemPositions(null)[i];
            if (nextPosition > position) {
                position = nextPosition;
            }
        }
        return position;
    } else {
        return ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
    }
}
 
源代码3 项目: AndroidProject   文件: BaseAdapter.java
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
    mRecyclerView = recyclerView;
    //用户设置了滚动监听,需要给RecyclerView设置监听
    if (mScrollListener != null) {
        //添加滚动监听
        mRecyclerView.addOnScrollListener(mScrollListener);
    }
    //判断当前的布局管理器是否为空,如果为空则设置默认的布局管理器
    if (mRecyclerView.getLayoutManager() == null) {
        RecyclerView.LayoutManager layoutManager = generateDefaultLayoutManager(mContext);
        if (layoutManager != null) {
            mRecyclerView.setLayoutManager(layoutManager);
        }
    }
}
 
@Override
public void onAttachedToRecyclerView(@NonNull final RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();

    // GridLayoutManager
    if (manager instanceof GridLayoutManager) {
        final GridLayoutManager gridManager = ((GridLayoutManager) manager);
        gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                // If the current position is header view or footer view, the item occupy two cells,
                // Normal item occupy a cell.
                int itemViewType = getItemViewType(position);
                if (itemViewType == TYPE_HEADER && mIsMergeHeader) {
                    return gridManager.getSpanCount();
                }
                if (itemViewType == TYPE_FOOTER && mIsMergeFooter) {
                    return gridManager.getSpanCount();
                }
                return 1;
            }
        });
    }
}
 
源代码5 项目: Infinity-For-Reddit   文件: PostFragment.java
private void refreshAdapter() {
    int previousPosition = -1;
    if (mLinearLayoutManager != null) {
        previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
    } else if (mStaggeredGridLayoutManager != null) {
        int[] into = new int[2];
        previousPosition = mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[0];
    }

    RecyclerView.LayoutManager layoutManager = mPostRecyclerView.getLayoutManager();
    mPostRecyclerView.setAdapter(null);
    mPostRecyclerView.setLayoutManager(null);
    mPostRecyclerView.setAdapter(mAdapter);
    mPostRecyclerView.setLayoutManager(layoutManager);

    if (previousPosition > 0) {
        mPostRecyclerView.scrollToPosition(previousPosition);
    }
}
 
源代码6 项目: Ruisi   文件: SearchActivity.java
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);
    mainWindow = findViewById(R.id.main_window);
    findViewById(R.id.btn_back).setOnClickListener(this);
    RecyclerView listView = findViewById(R.id.recycler_view);
    searchInput = findViewById(R.id.search_input);
    searchCard = findViewById(R.id.search_card);
    findViewById(R.id.start_search).setOnClickListener(this);
    findViewById(R.id.nav_search).setOnClickListener(this);
    searchInput.setHint("请输入搜索内容!");
    adapter = new SimpleListAdapter(ListType.SERRCH, this, datas);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    listView.setLayoutManager(layoutManager);
    listView.addItemDecoration(new MyListDivider(this, MyListDivider.VERTICAL));
    listView.addOnScrollListener(new LoadMoreListener((LinearLayoutManager) layoutManager, this, 20));
    listView.setAdapter(adapter);
    adapter.changeLoadMoreState(BaseAdapter.STATE_LOAD_NOTHING);
    navTitle = findViewById(R.id.nav_title);
    findViewById(R.id.nav_back).setOnClickListener(this);
    searchInput.setOnEditorActionListener(this);
}
 
源代码7 项目: GooglePlayCloned   文件: HomeCategoriesFragment.java
private void configureRecyclerViews() {
    topCategoriesRecyclerView = view.findViewById(R.id.rv_top_categories);
    topCategoriesRecyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager horizontalLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
    topCategoriesRecyclerView.setLayoutManager(horizontalLayoutManager);

    allCategoriesRecyclerView = view.findViewById(R.id.rv_all_categories);
    allCategoriesRecyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager verticalLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
    allCategoriesRecyclerView.setLayoutManager(verticalLayoutManager);

    loadDataAndSetAdapter();
}
 
源代码8 项目: HaoReader   文件: FastScroller.java
private boolean isLayoutReversed(final RecyclerView.LayoutManager layoutManager) {
    if (layoutManager instanceof LinearLayoutManager) {
        return ((LinearLayoutManager) layoutManager).getReverseLayout();
    } else if (layoutManager instanceof StaggeredGridLayoutManager) {
        return ((StaggeredGridLayoutManager) layoutManager).getReverseLayout();
    }
    return false;
}
 
源代码9 项目: ProjectX   文件: PagingOverScroller.java
@Override
public void run() {
    if (mRecyclerView == null)
        return;
    final RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
    if (layoutManager == null) {
        stop();
        return; // no layout, cannot scroll.
    }
    disableRunOnAnimationRequests();
    // keep a local reference so that if it is changed during onAnimation method, it won't
    // cause unexpected behaviors
    final OverScroller scroller = mScroller;

    if (scroller.computeScrollOffset()) {
        final int x = scroller.getCurrX();
        final int y = scroller.getCurrY();
        final int dx = x - mLastFlingX;
        final int dy = y - mLastFlingY;
        mLastFlingX = x;
        mLastFlingY = y;
        if (dx != 0 || dy != 0)
            mRecyclerView.scrollBy(dx, dy);
        if (scroller.isFinished()) {
            if (layoutManager instanceof PagingLayoutManager) {
                ((PagingLayoutManager) layoutManager).onFlingFinish();
            }
        } else {
            postOnAnimation();
        }
    }
    enableRunOnAnimationRequests();
}
 
源代码10 项目: Matisse   文件: AlbumMediaAdapter.java
private int getImageResize(Context context) {
    if (mImageResize == 0) {
        RecyclerView.LayoutManager lm = mRecyclerView.getLayoutManager();
        int spanCount = ((GridLayoutManager) lm).getSpanCount();
        int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
        int availableWidth = screenWidth - context.getResources().getDimensionPixelSize(
                R.dimen.media_grid_spacing) * (spanCount - 1);
        mImageResize = availableWidth / spanCount;
        mImageResize = (int) (mImageResize * mSelectionSpec.thumbnailScale);
    }
    return mImageResize;
}
 
源代码11 项目: SwipeRecyclerView   文件: DefaultItemDecoration.java
private int getOrientation(RecyclerView.LayoutManager layoutManager) {
    if (layoutManager instanceof LinearLayoutManager) {
        return ((LinearLayoutManager)layoutManager).getOrientation();
    } else if (layoutManager instanceof StaggeredGridLayoutManager) {
        return ((StaggeredGridLayoutManager)layoutManager).getOrientation();
    }
    return RecyclerView.VERTICAL;
}
 
源代码12 项目: Field-Book   文件: InfoBarAdapter.java
public void configureDropdownArray(String plotId) {
    this.plotId = plotId;
    selectorsView.setHasFixedSize(true);

    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this.context);
    selectorsView.setLayoutManager(layoutManager);

    selectorsView.setAdapter(this);
}
 
@Override
public void getItemOffsets(final Rect outRect, final View view, final RecyclerView parent, final RecyclerView.State state) {
	final RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();

	final int itemPosition = parent.getChildAdapterPosition(view);
	if (itemPosition != RecyclerView.NO_POSITION) {
		if (layoutManager instanceof GridLayoutManager) {
			final RendererRecyclerViewAdapter adapter = (RendererRecyclerViewAdapter) parent.getAdapter();
			final ViewModel item = adapter.getItem(itemPosition);
			if (item instanceof RecyclerViewModel) {
				outRect.left = dpToPixels(-10);
				outRect.right = dpToPixels(-10);
				outRect.top = dpToPixels(5);
				outRect.bottom = dpToPixels(5);
			} else if (item instanceof CategoryModel) {
				outRect.left = dpToPixels(5);
				outRect.right = dpToPixels(5);
				outRect.top = dpToPixels(10);
				outRect.bottom = dpToPixels(2);
			} else {
				outRect.left = dpToPixels(5);
				outRect.right = dpToPixels(5);
				outRect.top = dpToPixels(5);
				outRect.bottom = dpToPixels(5);
			}
		} else {
			throw new UnsupportedClassVersionError("Unsupported LayoutManager");
		}
	}
}
 
public static boolean canAutoRefresh(View view) {
    if (ViewCatcherUtil.isRecyclerView(view)) {
        RecyclerView recyclerView = (RecyclerView) view;
        RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
        if (manager == null) {
            return false;
        }
        int firstVisiblePosition = -1;
        if (manager instanceof LinearLayoutManager) {
            LinearLayoutManager linearManager = ((LinearLayoutManager) manager);
            if (linearManager.getOrientation() != RecyclerView.HORIZONTAL) {
                return false;
            }
            firstVisiblePosition = linearManager.findFirstVisibleItemPosition();
        } else if (manager instanceof StaggeredGridLayoutManager) {
            StaggeredGridLayoutManager gridLayoutManager = (StaggeredGridLayoutManager) manager;
            if (gridLayoutManager.getOrientation() != RecyclerView.HORIZONTAL) {
                return false;
            }
            int[] firstPositions = new int[gridLayoutManager.getSpanCount()];
            gridLayoutManager.findFirstVisibleItemPositions(firstPositions);
            for (int value : firstPositions) {
                if (value == 0) {
                    firstVisiblePosition = 0;
                    break;
                }
            }
        }
        RecyclerView.Adapter adapter = recyclerView.getAdapter();
        return adapter != null && firstVisiblePosition == 0;
    }
    return false;
}
 
源代码15 项目: RvHelper   文件: LayoutManagerUtil.java
private static int caseStaggeredGrid(RecyclerView.LayoutManager layoutManager, boolean findFirst) {
    StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
    int[] positions = new int[staggeredGridLayoutManager.getSpanCount()];

    if (findFirst) {
        staggeredGridLayoutManager.findFirstVisibleItemPositions(positions);
        Arrays.sort(positions);
        return positions[0];
    } else {
        staggeredGridLayoutManager.findLastVisibleItemPositions(positions);
        Arrays.sort(positions);
        return positions[positions.length - 1];
    }
}
 
源代码16 项目: NewFastFrame   文件: ListViewDecoration.java
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    if (divider != null) {
        outRect.set(0, 0, 0, divider.getIntrinsicHeight());
    } else {
        int position = parent.getChildAdapterPosition(view); // item position
        boolean hasHeader = false;
        if (parent instanceof SuperRecyclerView) {
            SuperRecyclerView superRecyclerView = (SuperRecyclerView) parent;
            if (superRecyclerView.getHeaderContainer().getChildCount() > position) {
                return;
            }
            int headerCount = superRecyclerView.getHeaderContainer().getChildCount();
            position -= headerCount;
            hasHeader = headerCount > 0;
        }
        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
        if (layoutManager instanceof GridLayoutManager) {

        } else if (layoutManager instanceof LinearLayoutManager) {
            LinearLayoutManager linearLayoutManager = ((LinearLayoutManager) layoutManager);
            if (linearLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
                outRect.right = divideSize;
                if (hasHeader && position == 0) {
                    outRect.left = divideSize;
                }
            } else {
                outRect.bottom = divideSize;
                if (position == 0) {
                    outRect.top = divideSize;
                }
            }

        }
    }
}
 
/**
 * Draw a vertical line.
 *
 * @param canvas Canvas
 * @param parent RecyclerView
 */
private void drawVerticalLine(Canvas canvas, RecyclerView parent) {
    RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
    if (layoutManager == null || mDivider == null) {
        return;
    }

    canvas.save();
    final int childCount = parent.getChildCount();
    for (int i = 0; i < childCount; i++) {
        final View child = parent.getChildAt(i);
        if (isLastColumn(child, parent)) {
            continue;
        }

        layoutManager.getDecoratedBoundsWithMargins(child, mBounds);
        final int top = mBounds.top;
        final int bottom = mBounds.bottom;
        int right = mBounds.right + Math.round(child.getTranslationX());
        // Vertical GridLayout display in the top, margin left or right mDividerWidth / 2.
        if (mOrientation == VERTICAL && layoutManager instanceof GridLayoutManager) {
            right += mDividerWidth / 2;
        }
        final int left = right - mDividerWidth;
        mDivider.setBounds(left, top, right, bottom);
        mDivider.draw(canvas);
    }
    canvas.restore();
}
 
void startProfilePreferencesActivity(Profile profile, int predefinedProfileIndex)
{
    /*
    PPApplication.logE("EditorProfileListFragment.startProfilePreferencesActivity", "profile="+profile);
    if (profile != null)
        PPApplication.logE("EditorProfileListFragment.startProfilePreferencesActivity", "profile._name="+profile._name);
    PPApplication.logE("EditorProfileListFragment.startProfilePreferencesActivity", "predefinedProfileIndex="+predefinedProfileIndex);
    */

    int editMode;

    if (profile != null)
    {
        // edit profile
        int profilePos = profileListAdapter.getItemPosition(profile);
        //PPApplication.logE("EditorProfileListFragment.startProfilePreferencesActivity", "profilePos="+profilePos);
        /*int last = listView.getLastVisiblePosition();
        int first = listView.getFirstVisiblePosition();
        if ((profilePos <= first) || (profilePos >= last)) {
            listView.setSelection(profilePos);
        }*/
        RecyclerView.LayoutManager lm = listView.getLayoutManager();
        if (lm != null)
            lm.scrollToPosition(profilePos);

        boolean startTargetHelps = getArguments() != null && getArguments().getBoolean(START_TARGET_HELPS_ARGUMENT, false);
        if (startTargetHelps)
            showAdapterTargetHelps();

        editMode = EDIT_MODE_EDIT;
    }
    else
    {
        // add new profile
        editMode = EDIT_MODE_INSERT;
    }

    //PPApplication.logE("EditorProfileListFragment.startProfilePreferencesActivity", "editMode="+editMode);

    // Notify the active callbacks interface (the activity, if the
    // fragment is attached to one) one must start profile preferences
    onStartProfilePreferencesCallback.onStartProfilePreferences(profile, editMode, predefinedProfileIndex);
}
 
public EndlessRecyclerOnScrollListener(RecyclerView.LayoutManager layoutManager) {
    this.layoutManager = layoutManager;
}
 
源代码20 项目: proteus   文件: LayoutManagerFactory.java
public RecyclerView.LayoutManager create(@NonNull String type, @NonNull ProteusRecyclerView view, @NonNull ObjectValue config) {
  return builders.get(type).create(view, config);
}