我在android材料设计api工作,想要以网格格式显示一些数据.我试过两个GridLayout,StaggeredGridlayout看起来都一样.一般信息,我想问一下Gridlayout和之间的区别是StaggeredGridlayout什么?
谢谢.
android android-layout android-gridlayout staggeredgridlayout
我有一个有两列的交错网格.这很有效.我想要的是位置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
我创建了一个非常简单的项目,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
我正在尝试在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
我已经尝试为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
我试图通过测量视图并动态设置高度来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) 我正在使用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
我的项目有不同的布局,有时我通过拖动布局中的项目在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
我正在使用带有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)