In einigen Fällen ist das Layout des Inhalts des Recyclerview zweigeteilt, darunter weiter in vier, und nein, es besteht keine Notwendigkeit, unter diesen vier Unterteilungen zu teilen! Auf diese Weise möchte ich den Inhalt der Recyclingansicht auf verschiedene Arten aufteilen!
so was!
Informationen zu RecyclerView http://qiita.com/Yuki_Yamada/items/ec8b6c1ff0c9d74c2a53 Über setSpan (wie viele Elemente sind geteilt) https://stackoverflow.com/questions/32366412/gridlayoutmanager-setspansizelookup-creating-blank-cells Über Viewtype http://woshidan.hatenablog.com/entry/2015/11/02/083000
build.gradle
compile 'com.android.support:recyclerview-v7:25.3.1'
Bitte hinzufügen.
Dieses Mal wird der in den drei Layoutdateien beschriebene XML-Inhalt auf die Recycling-Ansicht angewendet. Anschließend wird die Layoutdatei unten beschrieben.
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>
Als nächstes stellen wir die Recyclerview wie gewohnt ein. Bereiten Sie zunächst eine Recyclerview vor (Recyclerview kann keine untergeordneten Elemente enthalten).
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>
Verbinden Sie anschließend Recyclerview per Adapter mit "layout1.xml", "layout2.xml" und "layout3.xml".
custom_recyclerview_adapter.java
Paket mein Paket;
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;
/******wichtig******/
switch(i) {//Verzweigen Sie hier vom viewType des Layouts zum Layout, das Sie anwenden möchten.
case 0:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout1, viewGroup, false);
viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
//Ausgestattet mit Click Listener
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHold.getAdapterPosition(); //Position bekommen
Log.d("test",String.valueOf(position));//Geben Sie die Nummer zurück, die Sie gedrückt haben
}
});
return viewHold;
case 1:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout2, viewGroup, false);
viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
//Ausgestattet mit Click Listener
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHold.getAdapterPosition(); //Position bekommen
Log.d("test",String.valueOf(position));//Geben Sie die Nummer zurück, die Sie gedrückt haben
}
});
return viewHold;
case 2:
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout3, viewGroup, false);
viewHold = new custom_recyclerview_adapter.ViewHolder(view,i);
//Ausgestattet mit Click Listener
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewHold.getAdapterPosition(); //Position bekommen
Log.d("test",String.valueOf(position));//Geben Sie die Nummer zurück, die Sie gedrückt haben
}
});
return viewHold;
}
/*************/
return null;
}
@Override//Nehmen Sie hier Änderungen an der Ansicht vor
public void onBindViewHolder(custom_recyclerview_adapter.ViewHolder viewHolder, int i) {
//Datenanzeige
if(0 <= i && i <= 3) {
//viewHolder.title1.setText(test[i] + "Herr.");
}
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;
}
/******wichtig*******/
@Override
public int getItemViewType(int position) {//Position ist die Position des Elements in der Recyclingansicht
if(0 <= position && position <= 3) {//Ansichtstyp 0 bis 3 Inhalt von recyclerview"0"Einstellen
return 0;
}
else if(4 <= position && position <= 7){//Geben Sie den 4. bis 7. Inhalt von recyclerview ein"1"Einstellen
return 1;
}
else{//Andere Ansichtstypen"2"Einstellen
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);*/
}
}
}
Sie können "ViewType" für jede "Position" mit "getItemViewType" festlegen. Sie können sich ViewType als Flag vorstellen.
Die Schauspieler sind jetzt fertig. Lassen Sie uns implementieren! !!
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);//Die Verarbeitungsleistung verbessert sich, wenn die Ansichtsgröße festgelegt ist
/*****************************************wichtig*****************************************************/
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);//Mache 20 Gegenstände
recyclerView.setAdapter(adapter);
}
}
Wenn jedoch nichts unternommen wird, tritt ein Fehler auf. Die Spanne im Recyclerview ist nicht festgelegt. Beschreiben Sie die folgende Datei.
Custom_Spansize.java
Paket mein Paket;
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;
}
}
Damit ist die Implementierung abgeschlossen.
MainActivity.java
GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4, LinearLayoutManager.VERTICAL,false);
gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));
Ändern Sie nun das Bereichsintervall.
GridLayoutManager gridLayoutManagerVertical = new GridLayoutManager(this, 4,LinearLayoutManager.VERTICAL,false);
4
ist hier die höchste Anzahl von Spannen.
gridLayoutManagerVertical.setSpanSizeLookup(new Custom_Spansize(4, 2 ,1));
Ändern Sie hier das Intervall mit dem Argument. Die Idee ist
Das zweite Argument von GridLayoutManager ÷ Custom_Spansize jedes Argument = span Das Ergebnis der Teilung ist Span.
Das ist das Ende. Wir freuen uns von Ihnen zu hören.
https://github.com/hisakioomae/recyclerview_custom_layout_sample
Recommended Posts