2015-06-12 29 views
9

के कॉलम की संख्या को गतिशील रूप से बदलें, मैं वास्तव में अपने ऐप में दो कॉलम के साथ एक ग्रिडलाउट मैनेजर का उपयोग कर रहा हूं और मैं उपयोग किए गए दृश्य प्रकार के आधार पर एक कॉलम रखना चाहता हूं।गतिशील रूप से GridLayoutManager

यहाँ कोड मैं विधि मेरी टुकड़ा के "onCreateView()" में है:

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

तो:

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

फिर, मेरी अनुकूलक में, मैं कोड के इस प्रकार है , जब "TYPE_PREMIUM" दृश्य का उपयोग किया जाता है, तो मैं एक बटन (इसलिए एक कॉलम में) प्रदर्शित करना चाहता हूं और अन्य परिणामों के लिए सामान्य ग्रिडव्यू (दो कॉलम) रखना चाहता हूं।

क्या ऐसा करना संभव है?

धन्यवाद!

उत्तर

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

बिल्कुल सही, बस मुझे जो चाहिए, धन्यवाद! – fraxool

2

यदि मैं आपका प्रश्न समझता हूं, तो आप प्रीमियम-प्रकार दृश्य 1 के बजाय 2 कॉलम अवधि देना चाहते हैं? setSpanSizeLookup(SpanSizeLookup) के साथ कस्टम SpanSizeLookup सेट करके यह संभव है।

संबंधित मुद्दे