2015-06-12 26 views
9

Używam GridLayoutManager z dwiema kolumnami w mojej aplikacji i chciałbym mieć jedną kolumnę w zależności od używanego typu widoku.Dynamiczna zmiana liczby kolumn GridLayoutManager

Oto kod mam w metodzie "onCreateView()" mojego fragmentu:

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

Następnie w moim adapterze, mam tego rodzaju kodu:

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

Tak , gdy używany jest widok "TYPE_PREMIUM", chciałbym wyświetlić przycisk (czyli w jednej kolumnie) i mieć normalny widok siatki (dwie kolumny) dla pozostałych wyników.

Czy można to zrobić?

Dzięki!

Odpowiedz

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

Idealne, właśnie to, czego potrzebowałem, dzięki! – fraxool