2015-06-12 36 views
9

In realtà sto utilizzando un GridLayoutManager con due colonne nella mia app e vorrei avere una colonna in base al tipo di visualizzazione utilizzato.Cambia dinamicamente il numero di colonne di GridLayoutManager

Ecco il codice che ho nel metodo "onCreateView()" del mio frammento:

// 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); 

Poi, nel mio adattatore, ho questo tipo di codice:

@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; 
    } 
} 

Così , quando viene utilizzata la vista "TYPE_PREMIUM", mi piacerebbe visualizzare un pulsante (quindi in una colonna) e avere un normale gridview (due colonne) per gli altri risultati.

È possibile farlo?

Grazie!

risposta

22
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; 
    } 
}; 
+0

Perfetto, proprio quello di cui avevo bisogno, grazie! – fraxool

Problemi correlati