Je veux plier et étirer le contenu de la vue de recyclage!
J'en ai parlé. https://github.com/thoughtbot/expandable-recycler-view Celui-ci est plus facile à comprendre! !!
Tout d'abord, ajoutez la bibliothèque build.gradle.
build.gradle
dependencies {
compile 'com.thoughtbot:expandablerecyclerview:1.3'
compile 'com.android.support:recyclerview-v7:25.3.1'
}
Ensuite, créez un ViewHolder '' pour parent uniquement et un
ViewHolder '' pour enfant uniquement.
ViewHolder associe les données à la vue affichée à l'écran.
Bien sûr, il existe une vue parent et une vue enfant, donc deux ViewHolders sont nécessaires.
Parent_ViewHolder.java
package Ceci est mon package
import android.view.View;
import android.widget.TextView;
import com.thoughtbot.expandablerecyclerview.viewholders.GroupViewHolder;
public class Parent_ViewHolder extends GroupViewHolder {
private TextView text1;
public Parent_ViewHolder(View itemView) {//Obtenir l'identifiant de la vue parent
super(itemView);
text1 = (TextView)itemView.findViewById(R.id.parenttext);
}
public void set(String i){//Changer l'identifiant acquis
text1.setText(i);
}
}
Child_ViewHolder.java
package Ceci est mon package;
import android.view.View;
import android.widget.TextView;
import com.thoughtbot.expandablerecyclerview.viewholders.ChildViewHolder;
public class Child_ViewHolder extends ChildViewHolder {
private TextView text1;
public Child_ViewHolder(View itemView) {//Obtenir l'identifiant de la vue enfant
super(itemView);
text1 = (TextView)itemView.findViewById(R.id.childtext);
}
public void set(String i){//Changer l'identifiant acquis
text1.setText(i);
}
}
Ensuite, nous allons créer un adaptateur qui les associe. Est-ce un endroit où parents et enfants sont liés, c'est-à-dire comme une maison? : main_levée:
Home_Adapter.java
package Ceci est mon package;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.thoughtbot.expandablerecyclerview.ExpandCollapseController;
import com.thoughtbot.expandablerecyclerview.ExpandableRecyclerViewAdapter;
import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
import java.util.List;
public class Home_Adapter extends ExpandableRecyclerViewAdapter<Parent_ViewHolder, Child_ViewHolder> {
private ExpandCollapseController expandCollapseController;
public Home_Adapter(List<? extends ExpandableGroup> groups) {
super(groups);
this.expandCollapseController = new ExpandCollapseController(expandableList, this);
}
@Override
public Parent_ViewHolder onCreateGroupViewHolder(final ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.parent_item, parent, false);
return new Parent_ViewHolder(view);
}
@Override
public Child_ViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.child_item, parent, false);
return new Child_ViewHolder(view);
}
@Override
public void onBindGroupViewHolder(Parent_ViewHolder holder, int flatPosition, ExpandableGroup group) {
holder.set(String.valueOf(flatPosition));//Parent_Appelez la fonction créée par viewHolder
}
@Override
public void onBindChildViewHolder(Child_ViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
holder.set(String.valueOf(childIndex));//Child_Appelez la fonction créée par viewHolder
}
}
Ensuite, nous allons créer une mise en page à relier.
parent_item.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:background="@color/colorPrimaryDark"
android:id="@+id/parenttext"
android:text="parent"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</LinearLayout>
child_item.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:id="@+id/childtext"
android:text="Enfant"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</LinearLayout>
Ensuite, maintenant que nous avons l'adaptateur et la mise en page, exécutons-le en tant que programme. : pointer vers le haut:
MainActivity.java
package jp.app.oomae.hisaki.expandable_recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import static jp.app.oomae.hisaki.expandable_recyclerview.Home.makehome;
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.setLayoutManager(new GridLayoutManager(this, 1));
Home_Adapter adapter = new Home_Adapter(makehome());
recyclerView.setAdapter(adapter);//Réglez l'adaptateur
}
}
Et configurons une vue de recyclage sur l'écran principal.
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="wrap_content">
<android.support.v7.widget.RecyclerView
android:background="@color/colorAccent"
android:id="@+id/recyclerview"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Ensuite, décidons du nombre de parents et d'enfants à afficher. Cette fois, c'est une implémentation statique, mais si vous changez cela, je pense que ce sera dynamique. peut être,,, Tout d'abord, implémentez les groupes de données parent et enfant.
Parent.java
emballer mon mec;
import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
import java.util.List;
public class Parent extends ExpandableGroup<Child> {
public Parent(String title, List<Child> items) {
super(title, items);
}
}
Child.java
emballer mon mec;
import android.os.Parcel;
import android.os.Parcelable;
public class Child implements Parcelable {
private String name;
public Child(String name) {
this.name = name;
}
protected Child(Parcel in) {
name = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<Child> CREATOR = new Creator<Child>() {
@Override
public Child createFromParcel(Parcel in) {
return new Child(in);
}
@Override
public Child[] newArray(int size) {
return new Child[size];
}
};
}
Ensuite, créons une maison qui associe
Parent.java à `` `` Child.java
. (Il est impossible d'avoir une maison avec plusieurs parents et plusieurs enfants, mais cela ressemble à un établissement d'hébergement ??)
Home.java
package jp.app.oomae.hisaki.expandable_recyclerview;
import java.util.Arrays;
import java.util.List;
public class Home{
final private static int parents_num = 9;//Nombre de parents
final private static int child_num = 5;//Nombre d'enfants
public static List<Parent> makehome() {
Parent[] num = new Parent[parents_num];
for(int i = 0; i < parents_num; i++) {
num[i] = new Parent("parent" + String.valueOf(i),receive_child());
}
return Arrays.asList(num);
}
public static List<Child> receive_child() {
Child[] num = new Child[child_num];
for(int i = 0; i < child_num; i++) {
num[i] = new Child("child" + String.valueOf(i));
}
return Arrays.asList(num);
}
}
Ici, nous combinons les données enfants et les données parent.
C'est tout pour le code. Nous recherchons des critiques et des critiques. : muscle_tone3:
https://github.com/hisakioomae/Expandable_Recyclerview_sample/tree/master
Recommended Posts