动态更改GridLayoutManager的列数

fra*_*ool 13 android gridview android-adapter android-gridlayout

我实际上在我的应用程序中使用了一个带有两列的GridLayoutManager,我希望根据所使用的视图类型有一列.

这是我片段的方法"onCreateView()"中的代码:

// Recycler view for users
usersList = (RecyclerView) mView.findViewById(R.id.usersList);

// Layout manager (grid of users
layoutManager = new GridLayoutManager(mContext, 2);
usersList.setLayoutManager(layoutManager);

// ArrayList of users
users = new ArrayList<User>();

// Set the adapter for the list of users
mHomeListAdapter = new HomeListAdapter(getActivity(), users);
usersList.setAdapter(mHomeListAdapter);
Run Code Online (Sandbox Code Playgroud)

然后,在我的适配器中,我有这样的代码:

@Override
public int getItemViewType(int position) {
    if (position == 5) {
        return TYPE_PREMIUM;
    } else {
        return TYPE_ITEM;
    }
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == TYPE_PREMIUM) {
        View view = mInflater.inflate(R.layout.become_premium, parent, false);
        HeaderViewHolder holder = new HeaderViewHolder(view);
        return holder;
    } else {
        View view = mInflater.inflate(R.layout.posts_item, parent, false);
        ViewHolderPosts holder = new ViewHolderPosts(view);
        return holder;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,当使用视图"TYPE_PREMIUM"时,我想显示一个按钮(所以在一列中)并且具有用于其他结果的普通网格视图(两列).

是否有可能做到这一点?

谢谢!

and*_*ryo 27

mGridLayoutManager = new GridLayoutManager(mContext, 2);
mGridLayoutManager.setSpanSizeLookup(onSpanSizeLookup);    

/**
 * Helper class to set span size for grid items based on orientation and device type
 */
GridLayoutManager.SpanSizeLookup onSpanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        return mHomeListAdapter.getItemViewType(position) == TYPE_PREMIUM ? 2 : 1;
    }
};
Run Code Online (Sandbox Code Playgroud)