अपने प्रश्न शोध में, मैं नया कुछ सीखा: मैं RecyclerView
के लिए GridLayoutManager
को देखने के लिए हुआ है और मैंने देखा है आप एक कस्टम SpanSizeLookup
सेट कर सकते हैं कि। यदि आप क्षैतिज स्क्रॉल कर रहे हैं तो अब एक "अवधि" केवल एक कॉलम है यदि आप लंबवत स्क्रॉल कर रहे हैं और एक पंक्ति। तो SpanSizeLookup
आप उदाहरण के लिए निर्दिष्ट कर सकते हैं, आइटम 0 2 कॉलम लेता है, मद 1 1 कॉलम, आदि लेता
ऐसा लगता है कि समाधान आसान peasy है अगर आप एक GridLayoutManager
साथ RecyclerView
का उपयोग करें:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create a grid layout with two columns
GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
// Create a custom SpanSizeLookup where the first item spans both columns
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position == 0 ? 2 : 1;
}
});
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(new MyGridAdapter());
}
मैंने इसे परीक्षण करने के लिए एक परीक्षण प्रोजेक्ट बनाया है और यह सुनिश्चित कर लिया है कि मैंने ऐसा किया जो मैंने किया था, और यह एक आकर्षण की तरह काम करता था।
एडाप्टर के बारे में एक नोट: RecyclerView.Adapter
ListAdapter
साथ संगत नहीं है। आपको अपने एडाप्टर को RecyclerView.Adapter
से विस्तारित करने और उचित परिवर्तन करने की आवश्यकता है।
public static class MyViewHolder extends RecyclerView.ViewHolder {
ImageView mImageView;
TextView mTextView;
public MyViewHolder(View itemView) {
super(itemView);
mImageView = (ImageView) itemView.findViewById(R.id.imageView);
mTextView = (TextView) itemView.findViewById(R.id.textView);
}
}
public static class MyGridAdapter extends RecyclerView.Adapter<MyViewHolder> {
private int[] mDrawables;
public MyGridAdapter() {
this.mDrawables = new int[] {
R.drawable.images_01,
R.drawable.images_02,
.
.
.
};
}
@Override
public int getItemCount() {
return mDrawables.length;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_grid_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
// set up any onClickListener you need on the view here
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.mImageView.setImageResource(mDrawables[position]);
holder.mTextView.setText("Image " + position);
}
}
सबसे पहले, एक RecyclerView.ViewHolder
उपवर्ग बनाएँ:
यहाँ अनुकूलक मैं अपने परीक्षण परियोजना के लिए बनाया गया है। व्यू धारक पैटर्न अब एडाप्टर दृश्य करने के इस नए तरीके का एक अभिन्न हिस्सा है। आपका ViewHolder
आपके दृश्य के लिए सभी बच्चे के विचार सेट अप करेगा।
फिर आपके RecyclerView.Adapter
उपclass में, onCreateViewHolder()
और onBindViewHolder()
ओवरराइड करें। onCreateViewHolder()
में आप अपना विचार बढ़ाते हैं और ViewHolder
का निर्माण करते हैं। onBindViewHolder()
में, आप एडाप्टर डेटा प्राप्त करने के लिए position
का उपयोग करते हैं और ViewHolder
का उपयोग करके बच्चे के दृश्य सेट अप करते हैं। तो RecyclerView
तकनीकी रूप से ViewHolder
एस रीसायकल करता है जिसमें View
एस शामिल है।
एक बार जब आप अपने एडाप्टर में ये परिवर्तन करते हैं, तो आपको पूरा सेट होना चाहिए।
आपने क्या प्रयास किया? – mdelolmo
मैंने एक उत्तर जोड़ा। मैं सुझाव देना चाहता हूं कि आप अपने प्रश्न का शीर्षक और सामग्री बदल दें, बस इस समाधान के लिए खोज रहे अन्य लोग इसे ढूंढ सकें। शायद कुछ ऐसा है: "दो कॉलम के साथ ग्रिड व्यू, पहला आइटम दोनों स्तंभों को फैलाता है"। –