标签: staggeredgridlayout

Android - Gridlayout和Staggered Gridlayout之间的区别

我在android材料设计api工作,想要以网格格式显示一些数据.我试过两个GridLayout,StaggeredGridlayout看起来都一样.一般信息,我想问一下Gridlayout和之间的区别是StaggeredGridlayout什么?

谢谢.

android android-layout android-gridlayout staggeredgridlayout

34
推荐指数
2
解决办法
3万
查看次数

在StaggeredGridLayoutManager中设置单行的跨度大小

我有一个有两列的交错网格.这很有效.我想要的是位置0,行跨越2列.我之前很容易使用GridLayoutManger这样做:

                mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                    @Override
                    public int getSpanSize(int position) {
                        return position == 0 ? 2 : 1;
                    }
                });
Run Code Online (Sandbox Code Playgroud)

StaggeredGridLayoutManager没有像GridLayoutManager那样为我提供这个功能.

有没有不同的方式这样做?我已经搜索但没有找到任何有相同问题的人,这是令人惊讶的,因为我认为这个功能对于我的场景和无限滚动非常有用,当ProgressBar显示在RecyclerView的最后一行时.

android android-support-library staggeredgridlayout android-recyclerview

28
推荐指数
2
解决办法
2万
查看次数

StaggeredGridLayoutManager和移动项目

我创建了一个非常简单的项目,StaggeredGridLayoutManager通过recyclerview 显示28个图像.但是当我滚动Recyclerview时,它会移动项目,例如从左向右移动或交换左右列.

代码:

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;


public class MainActivity extends Activity {


    String mImageDir;
    private RecyclerView mRecyclerView;
    private StaggeredGridLayoutManager mLayoutManager;



    MyRecyclerAdapter myRecyclerAdapter;
    List<ImageModel> mImageList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);   
        mRecyclerView = (RecyclerView)findViewById(R.id.recyclerview_rootview);
        mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);     
        mLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);        
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setHasFixedSize(false);
        mImageList = new ArrayList<ImageModel>();
        for (int i = 1; i < 29 ; i++) {
            ImageModel img = new ImageModel();
            img.setTitle("Image No " + i);
            int drawableResourceId …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter staggeredgridlayout android-recyclerview

23
推荐指数
5
解决办法
2万
查看次数

RecyclerView onCreateViewHolder返回类型与多个自定义ViewHolders不兼容

我正在尝试在RecyclerView中使用多个ViewHolders,以便在运行时交换这些视图.我创建了两个扩展RecyclerView.ViewHolder的类:

MenuItemViewHolder

public class MenuItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView menuItemText;
    public ImageView menuItemPhoto;
    public RecyclerViewAdapter rva;

    public MenuItemViewHolder(View itemView) {
         super(itemView);
         itemView.setOnClickListener(this);

         rva = caller;
         menuItemText = (TextView) itemView.findViewById(R.id.grid_text);
         menuItemPhoto = (ImageView) itemView.findViewById(R.id.grid_image);
    }

    @Override
    public void onClick(View view) {
          Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();

    }

}
Run Code Online (Sandbox Code Playgroud)

SelectedItemViewHolder

public class SelectedItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView menuItemText;
    public ImageView menuItemPhoto;
    public RecyclerViewAdapter rva;

    public SelectedItemViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);

         menuItemText = (TextView) …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder staggeredgridlayout android-recyclerview recyclerview-layout

20
推荐指数
1
解决办法
5826
查看次数

如何使用StaggeredLayoutManager实现无限滚动

我已经尝试为LinearLayoutManager实现无限滚动并且它成功并尝试将LinearLayoutManager实现复制到StaggeredGridLayoutManager但它不起作用.

我只想获得firstVisibleItem.

在LinearLayoutManager中:

int firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition(int);
Run Code Online (Sandbox Code Playgroud)

但在StaggeredGridLayoutManager中是:

int firstVisibleItem = staggeredGridLayoutManager.findFirstVisibleItemPositions(int[])
Run Code Online (Sandbox Code Playgroud)

如何使用(int)not(int [])获取firstVisibleItem?

对此有什么好的方法/实施吗?

提前致谢.

android endlessscroll staggeredgridlayout android-recyclerview

18
推荐指数
3
解决办法
7398
查看次数

动态设置交错网格视图的固定高度

我试图通过测量视图并动态设置高度来RecyclerView使用a StaggeredGridLayout并使其成为固定高度.我压倒了onMeasure(),但似乎并不总是正确测量.我说它大约50%的时间都有效.其他50%的时间用于衡量它.我认为它与文本包装时有关view_tile_small.xml,但我不确定.

分段

public class AtTheMuseumFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{

        //Odds n Ends Variables
        private MapFragment mapFragment;
        private FragmentTransaction fragmentTransaction;
        private User user = new User();
        private MuseumCollection museumCollection;
        private Context context;

        //Story Grid Adapter Variables
        private AtTheMuseumAdapter nearMeAdapter;
        private TileFactory tileFactory;

        //Interfaces
        private OnFragmentChangeListener changeListener;

        @Bind(R.id.stories_list_view) RecyclerView storiesListView;
        @Bind(R.id.swipe_container) SwipeRefreshLayout swipeRefreshLayout;

        public static AtTheMuseumFragment newInstance(MuseumCollection museumCollection) {
            AtTheMuseumFragment fragment = new AtTheMuseumFragment();
            Bundle args = new Bundle();
            fragment.setArguments(args);
            return fragment;
        }

        public …
Run Code Online (Sandbox Code Playgroud)

java android staggeredgridlayout android-recyclerview

18
推荐指数
1
解决办法
1766
查看次数

如何确定交错网格布局管理器中的列位置

我正在使用交错的回收站视图布局来获取照片列表.我希望两侧的间距为零,同时两列之间仍有空间.我正在使用项目装饰子类来获取附加照片中看到的间距.我知道我可以控制左右间距,但问题是我从来不知道照片所在的列.看起来交错的布局管理器会进行一些自己的重新排序.我尝试过使用getChildAdapterPosition但它似乎返回数据源数组中的位置而不是布局中照片的实际位置.知道我应该如何处理这个问题吗? 在此输入图像描述

android staggeredgridlayout

17
推荐指数
1
解决办法
6424
查看次数

在回收站视图Gridlayout管理器中创建总线布局时出现间距问题

我正在使用GirdLayout Manager的Recycler视图来创建总线布局

我的问题是间距我根据行列填充数据

这就是我如何获得布局 在此输入图像描述

这就是我想要的布局: 在此输入图像描述

我希望第2行第0列旁边的第3行和第2列的项目如图所示,如何删除该空间,项目应根据其上部项目进行调整.

 customGridAdapter = new CustomGridViewAdapter(getActivity(), busSeatModel, false, fareCategory, BusSeatLayout.this);
                        RtlGridLayoutManager gridLayoutManager = new RtlGridLayoutManager(getActivity(), busSeatModel.getMaxLowerColumn());
                        seatLayout.setLayoutManager(gridLayoutManager);
                        seatLayout.setAdapter(customGridAdapter);
Run Code Online (Sandbox Code Playgroud)

这是我的customGridAdapter onBindViewHolder

public class CustomGridViewAdapter extends RecyclerView.Adapter<CustomGridViewAdapter.MyViewHolder> {

Context context;
BusSeatModel busSeatModel;
HashMap<Integer, HashMap<Integer, BusSeatItemModel>> data = new HashMap<>();
LayoutInflater inflater;
boolean upper;
HashMap<Integer, BusSeatItemModel> seatLowerModels;
BusSeatItemModel lowerModel;
int maxColumn = 0;
int maxRow = 0;
BusSeatLayout busSeatLayout;
int fare;

public CustomGridViewAdapter(Context context, BusSeatModel busSeatModel, boolean upper, int fare, BusSeatLayout busSeatLayout) {
    this.context = context;
    this.busSeatModel = busSeatModel; …
Run Code Online (Sandbox Code Playgroud)

android gridlayoutmanager staggeredgridlayout android-recyclerview

15
推荐指数
1
解决办法
956
查看次数

StaggeredGridLayoutManager重新排序项目

我的项目有不同的布局,有时我通过拖动布局中的项目在RecyclerView上创建一个间隙或间隙.当我滚动回到RecyclerView的顶部时,一些项目被重新排序并且空隙被它们填满.此处捕获行为:

滚动到顶部时自动重新排序

填补空白是可以的.当项目在拖动期间改变位置时也可以.问题在于滚动到顶部.滚动结束时发生重新排序 - 我没有触摸屏幕.

这就是我如何创建回收和布局管理器

    recyclerView = (RecyclerView)layout.findViewById(R.id.recycler_view);

    stagaggeredGridLayoutManager =
        new StaggeredGridLayoutManager(
            getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 3 : 2, StaggeredGridLayoutManager.VERTICAL);

    recyclerView.setLayoutManager(stagaggeredGridLayoutManager);

    stagaggeredList = getListItemData();

    StatisticsGridViewAdapter rcAdapter = new StatisticsGridViewAdapter(this.getActivity(), stagaggeredList, recyclerView);

    ItemTouchHelper.Callback callback = new StatisticsTouchHelperCallback(rcAdapter);
    touchHelper = new ItemTouchHelper(callback);
    touchHelper.attachToRecyclerView(recyclerView);

    recyclerView.setAdapter(rcAdapter);
Run Code Online (Sandbox Code Playgroud)

ItemTouchHelper类

public class StatisticsTouchHelperCallback extends ItemTouchHelper.Callback {

    private final ItemTouchHelperAdapter touchHelperAdapter;


    @Override
    public boolean isLongPressDragEnabled() {
        return true;
    }

    @Override
    public boolean isItemViewSwipeEnabled() {
        return false;
    }

    @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        int dragFlags = …
Run Code Online (Sandbox Code Playgroud)

android android-layout staggeredgridlayout android-recyclerview

15
推荐指数
1
解决办法
1817
查看次数

使用带有StaggeredGridLayoutManager的RecyclerView时,如何避免项目之间的双重空间?

我正在使用带有StaggeredGridLayoutManager的RecyclerView来创建一个两列列表.但是如何在左列和右列之间设置右边距.我已经使用此代码从顶部创建右边距,但如何解决列之间的双倍空格.

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpacesItemDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.left = space;
        outRect.right = space;
        outRect.bottom = space;

        // Add top margin only for the first or second item to avoid double space between items
        // Add top margin only for the first or second item to avoid double space between items
        if((parent.getChildCount() > 0 && parent.getChildPosition(view) == 0) …
Run Code Online (Sandbox Code Playgroud)

android margins staggeredgridlayout android-recyclerview

14
推荐指数
4
解决办法
7821
查看次数