Dans certains cas, la présentation du contenu de Recyclerview est divisée en deux, ci-dessous qui est divisé en quatre, non, il n'est pas nécessaire de diviser en dessous de ces quatre divisions! De cette façon, je veux diviser le contenu de la vue de recyclage de différentes manières!
comme ça!
À propos de RecyclerView http://qiita.com/Yuki_Yamada/items/ec8b6c1ff0c9d74c2a53 À propos de setSpan (combien d'éléments sont divisés) https://stackoverflow.com/questions/32366412/gridlayoutmanager-setspansizelookup-creating-blank-cells À propos de Viewtype http://woshidan.hatenablog.com/entry/2015/11/02/083000
build.gradle
compile 'com.android.support:recyclerview-v7:25.3.1'
S'il-vous-plait ajoutez.
Cette fois, le contenu de xml décrit dans les trois fichiers de mise en page est appliqué à la vue de recyclage. Ensuite, le fichier de mise en page est décrit ci-dessous.
layout1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_margin="1dp"
android:text="1"
android:background="@color/colorAccent"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp" />
</LinearLayout>
layout2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_margin="1dp"
android:text="2"
android:background="@color/colorPrimaryDark"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="100dp" />
</LinearLayout>
layout3.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_margin="1dp"
android:text="3"
android:background="@color/colorPrimary"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="200dp" />
</LinearLayout>
Ensuite, définissons le Recyclerview comme d'habitude. Tout d'abord, préparez un Recyclerview (Recyclerview ne peut pas avoir d'éléments enfants)
recyclerview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Ensuite, connectez Recyclerview avec layout1.xml
, layout2.xml
et layout3.xml
par adaptateur.
custom_recyclerview_adapter.java
emballer mon colis;
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class custom_recyclerview_adapter extends RecyclerView.Adapter<custom_recyclerview_adapter.ViewHolder>{
private Activity mactivity;
private int item_count;
public custom_recyclerview_adapter(Activity mactivity,int item_count) {
this.mactivity = mactivity;
this.item_count = item_count;
}
@Override
public custom_recyclerview_adapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view;
final custom_recyclerview_adapter.ViewHolder viewHold;
/******important******/
switch(i) {//Ici, passez du viewType de la disposition à la disposition que vous souhaitez appliquer.
case 0:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout1, viewGroup, false);
viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
//Équipé d'un écouteur de clic
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHold.getAdapterPosition(); //Obtenir la position
Log.d("test",String.valueOf(position));//Renvoie le numéro que vous avez appuyé
}
});
return viewHold;
case 1:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout2, viewGroup, false);
viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
//Équipé d'un écouteur de clic
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHold.getAdapterPosition(); //Obtenir la position
Log.d("test",String.valueOf(position));//Renvoie le numéro que vous avez appuyé
}
});
return viewHold;
case 2:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout3, viewGroup, false);
viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
//Équipé d'un écouteur de clic
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHold.getAdapterPosition(); //Obtenir la position
Log.d("test",String.valueOf(position));//Renvoie le numéro que vous avez appuyé
}
});
return viewHold;
}
/*************/
return null;
}
@Override//Apportez des modifications à la vue ici
public void onBindViewHolder(custom_recyclerview_adapter.ViewHolder viewHolder, int i) {
//Affichage des données
if(0 <= i && i <= 3) {
//viewHolder.title1.setText(test[i] + "M.");
}
else if(4 <= i && i <= 7){// creates second view
//viewHolder.title2.setText("hello");
}
else{// creates third view
//viewHolder.title3.setText("test");
}
}
@Override
public int getItemCount() {
return item_count;
}
/******important*******/
@Override
public int getItemViewType(int position) {//position est la position de l'article dans la vue de recyclage
if(0 <= position && position <= 3) {//Viewtype 0e au 3e contenu de recyclerview"0"Mis à
return 0;
}
else if(4 <= position && position <= 7){//Viewtype le 4e au 7e contenu de recyclerview"1"Mis à
return 1;
}
else{//Autres types de vues"2"Mis à
return 2;
}
}
/*****************/
public class ViewHolder extends RecyclerView.ViewHolder{
/*TextView title1;
TextView title2;
TextView title3;*/
public ViewHolder(View view,int i) {
super(view);
/*title1 = (TextView)view.findViewById(R.id.textsample);
title2 = (TextView)view.findViewById(R.id.textsample1);
title3 = (TextView)view.findViewById(R.id.textsample2);*/
}
}
}
Vous pouvez définir «ViewType» pour chaque «position» avec «getItemViewType». Vous pouvez considérer «ViewType» comme un indicateur.
Les acteurs sont maintenant terminés. Mettons en œuvre! !!
MainActivity.java
package jp.app.oomae.hisaki.recyclerview_custom_layout_sample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recyclerview);
RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);//Les performances de traitement s'améliorent lorsque la taille de la vue est fixe
/*****************************************important*****************************************************/
GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4, LinearLayoutManager.VERTICAL,false);
gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));
recyclerView.setLayoutManager(gridLayoutManagerVertical);
/*************************************************************************************************/
custom_recyclerview_adapter adapter = new custom_recyclerview_adapter(this,20);//Faire 20 articles
recyclerView.setAdapter(adapter);
}
}
Cependant, si rien n'est fait, une erreur se produira. La portée à l'intérieur de Recyclerview n'est pas définie. Décrivez le fichier suivant.
Custom_Spansize.java
emballer mon colis;
import android.support.v7.widget.GridLayoutManager;
public class Custom_Spansize extends GridLayoutManager.SpanSizeLookup{
private int spanCnt1, spanCnt2 , spanCnt3;
public Custom_Spansize(int spanCnt1, int spanCnt2,int spanCnt3) {
super();
this.spanCnt1 = spanCnt1;
this.spanCnt2 = spanCnt2;
this.spanCnt3 = spanCnt3;
}
@Override
public int getSpanSize(int position) {
int result;
if(position >= 0 && position <= 3){
result = spanCnt1;
}
else if(position >= 4 && position <= 7){
result = spanCnt2;
}
else {
result = spanCnt3;
}
return result;
}
}
Ceci termine la mise en œuvre.
MainActivity.java
GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4, LinearLayoutManager.VERTICAL,false);
gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));
Modifiez maintenant l'intervalle de temps.
GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4,LinearLayoutManager.VERTICAL,false);
«4» est le plus grand nombre de portées.
gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));
Modifiez l'intervalle avec l'argument ici. L'idée est
Deuxième argument de GridLayoutManager ÷ Custom_Spansize chaque argument = span Le résultat de la division est Span.
C'est la fin. Nous avons hâte d'avoir de tes nouvelles.
https://github.com/hisakioomae/recyclerview_custom_layout_sample
Recommended Posts