[JAVA] Maintenant, j'ai résumé les bases de RecyclerView

Qu'est-ce que RecyclerView?

  • Widget pour répéter dynamiquement la vue

  • Inclus dans la bibliothèque de support (com.android.support: recyclerview-v7)

Exemple 1.png

Comment l'utiliser?

  • Pour utiliser RecyclerView, vous devez créer au minimum Adapter et ViewHolder.
  • Utilisez LayoutManager pour la gestion de la mise en page de RecyclerView

Allons-y

Constitution

  • Cette fois, je vais le faire avec la configuration minimale
  • RecyclerViewActivity.java ・ ・ ・ Affichage RecyclerView
  • RecyclerViewAdapter.java ・ ・ ・ Associe la vue aux données
  • activity_recycler_view.xml ・ ・ ・ Disposition de l'ensemble de RecyclerView
  • row.xml ・ ・ ・ Disposition d'une ligne dans RecyclerView

procédure

(1) Décrivez la dépendance de la bibliothèque de support dans build.gradle

_ (Puisque CardView est également utilisé cette fois, décrivez-le) _

build.gradle


dependencies {
	...
    compile 'com.android.support:recyclerview-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
  
    ...
}

(2) Définir la disposition de l'ensemble de RecyclerView

activity_recycler_view.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

(3) Définissez la mise en page pour chaque ligne

row.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:layout_margin="8dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp" />
</android.support.v7.widget.CardView>

(4) Décrivez le processus d'initialisation de RecyclerView avec Activity

RecyclerViewActivity.java



public class RecyclerViewActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerViewAdapter recyclerViewAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

		 // [1] 
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);

		 // [2] 
        recyclerViewAdapter = new RecyclerViewAdapter(getListData());
        recyclerView.setAdapter(recyclerViewAdapter);
    }

    private List<String> getListData() {
        ArrayList<String> list = new ArrayList<>();
        list.add("janvier");
        list.add("février");
        list.add("Yayoi");
        list.add("Uzuki");
        list.add("Satsuki");
        list.add("Minazuki");
        list.add("juillet");
        list.add("Hazuki");
        list.add("Plusieurs mois");
        list.add("Kannazuki");
        list.add("Shimotsuki");
        list.add("Course de maître");
        return list;
    }

}

(5) Créez une classe d'adaptateur et associez les données à la vue.

RecyclerViewAdapter.java



public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

    protected List<String> dataSet;

	// [3]
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public final TextView textView;

        public ViewHolder(View v) {
            super(v);
            textView = (TextView) v.findViewById(R.id.text_view);
        }
    }
    
	// [4]
    public RecyclerViewAdapter(List<String> myDataSet) {
        dataSet = myDataSet;
    }

	// [5]
    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

	// [6]
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String text = dataSet.get(position);
        holder.textView.setText(text);
    }

	// [7]
    @Override
    public int getItemCount() {
        return dataSet.size();
    }

}


Description

  • [1] Une instance de LinearLayoutManager est créée et transmise comme argument de la méthode setLayoutManager () de RecyclerView. En plus de LinearLayoutManager, il existe d'autres types tels que GridLayoutManager. Changez en fonction de la mise en page que vous souhaitez afficher.

  • [2] Un adaptateur est généré et défini dans la vue. Cette fois, les données sont également transmises au moment de la génération de l'adaptateur.

  • [3] Une classe qui hérite de RecyclerView.ViewHolder. Contient une référence à View. La méthode onCreateViewHolder () dans [5] renvoie une instance de ViewHolder.

  • [4] Cette fois, les données sont également transmises lorsque l'adaptateur est généré.

  • [5] View inflate (inflate), ViewHolder sont créés et renvoyés.

  • [6] Les données sont définies pour ViewHolder.

  • [7] Renvoie le nombre d'éléments à afficher dans RecyclerView.

Impressions

  • J'ai pu suivre le déroulement du processus, mais pour être honnête, j'ai le sentiment que je n'ai pas compris ce que fait LayoutManager dans les coulisses et ce que fait ViewHolder.

Recommended Posts