Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Android RecyclerView: komplettes Code-Beispiel

02.10.2018 (👁9149)


Die Android RecyclerView ist der Nachfolger der ListView als Listen Anzeigeelement in Android Java.

Um eine RecyclerView in einer Android Activity-Seite anzeigen zu können, fügt man den <RecycleView> Tag in die Activity.xml ein und erstellt anschliessend einen Adapter zum Laden des RecyclerView Elements und ein Item-Layout, welches einem Zeilen oder Grid-Element entspricht. Das Programmieren einer REcyclerView ist ein wenig aufwendiger als der Vorgänger ListView. Deshalb hier ein komplettes Code-Beispiel in XML und Java.

1) Einfügen in die Activity

Man fügt einfach das View-Tag in die Activity ein.

<android.support.v7.widget.RecyclerView ..>

Das RecyclerView ist ein neueres View Element und wird deshalb mit android.support.v7.widget eingebunden.

In den Grade Scripts Module müssen hierzu noch die Impements erweitert werden.

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:app="http://schemas.android.com/apk/res-auto"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context=".MainActivity">

    ..

    <
android.support.v7.widget.RecyclerView
       
android:id="@+id/List_Notes"
       
android:layout_width="240dp"
       
android:layout_height="413dp"
       
android:layout_marginStart="140dp"
       
android:layout_marginTop="84dp"
       
android:clickable="true"
       
android:longClickable="true"
       
android:scrollbars="horizontal|vertical"
       
app:layout_constraintStart_toStartOf="parent"
       
app:layout_constraintTop_toTopOf="parent" />

</
android.support.constraint.ConstraintLayout>

 

 

 

Activity Code

In der MainActivity wird das RecyclerView geladen, indem man die Daten in eine ArrayList lädt.

Dann übergibt man die ArrayList einem eigenen Adapter, welcher dann die Liste lädt.

Der Adapter muss extra in einer Adapter-Klasse geschrieben werden.

RecyclerView.Adapter adapter = new Adapter_for_RecylerView(data_with_Notes );
list_with_notes.setAdapter(adapter);

package com.codedocu.demo07_recyclerview;

import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);

       
//--< load_List >--
       
load_RecyclerView_List();
       
//--</ load_List >--
   
}


   
public void load_RecyclerView_List() {
       
//------------< load_RecyclerView_List() >------------
       
RecyclerView list_with_notes=findViewById(R.id.List_Notes);
       
//ArrayList<String> arrayList = new ArrayList<String>();
       
ArrayList<DataModel_Note> data_with_Notes = new ArrayList<DataModel_Note>();


       
//< get Table >
       
data_with_Notes.add(new DataModel_Note(1,"Row 1"));
        data_with_Notes.add(
new DataModel_Note(2,"Row 2"));
        data_with_Notes.add(
new DataModel_Note(3,"Row 3"));
       
//</ get Table >

        //----< load List-View >----
        //< show results >
       
list_with_notes.setLayoutManager(new LinearLayoutManager(this));

        RecyclerView.Adapter adapter =
new Adapter_for_RecylerView(data_with_Notes );
        list_with_notes.setAdapter(adapter);
       
//</ show results >
        //----</ load List-View >----

        //--< onClick listener >--
       
((Adapter_for_RecylerView) adapter).setOnItemClickListener(new Adapter_for_RecylerView.OnItemClickListener() {
           
@Override
           
public void onItemClick(View view, int position) {
               
//------< onItemClick() >--------
                //< get Row_Fields >
               
String sPosition=String.valueOf(position);
                TextView item_lblID=view.findViewById(R.id.
lblID);
                TextView item_lblTitle=view.findViewById(R.id.
lblTitle);
                String sID=item_lblID.getText().toString();
                String sTitle=item_lblTitle.getText().toString();
               
//</ get Row_Fields >

                //-< set active_elements >
//                TextView lblIDNote=findViewById(R.id.IDNote);
//                lblIDNote.setText(sID);
//                EditText edit=findViewById(R.id.editTitle);
//                edit.setText(sTitle);
                //-</ set active_elements >

                //< show >
               
Toast.makeText(MainActivity.this, "position=" + position + " Title=" + sTitle + " ID=" + sID, Toast.LENGTH_SHORT).show();
               
//</ show >
                //------< onItemClick() >--------
           
}
        });
       
//--</ onClick listener >--

        //------------</ load_RecyclerView_List() >------------
   
}

}

 

 

 

 

Adapter Code

Java Code

Der Adapter wird mit den Quell-Daten als Parameter aufgerufen und lädt zur Laufzeit die Layout Vorlage eines Item wie einer Reihe.

Dieser Zwischenschritt nennt sich ViewHolder.

Dann werden die Daten den einzelnen View Elementen zugewiesen. Dabei können wärend der Laufzeit anpassungen gemacht werden.

package com.codedocu.demo07_recyclerview;

import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);

       
//--< load_List >--
       
load_RecyclerView_List();
       
//--</ load_List >--
   
}


   
public void load_RecyclerView_List() {
       
//------------< load_RecyclerView_List() >------------
       
RecyclerView list_with_notes=findViewById(R.id.List_Notes);
       
//ArrayList<String> arrayList = new ArrayList<String>();
       
ArrayList<DataModel_Note> data_with_Notes = new ArrayList<DataModel_Note>();


       
//< get Table >
       
data_with_Notes.add(new DataModel_Note(1,"Row 1"));
        data_with_Notes.add(
new DataModel_Note(2,"Row 2"));
        data_with_Notes.add(
new DataModel_Note(3,"Row 3"));
       
//</ get Table >

        //----< load List-View >----
        //< show results >
       
list_with_notes.setLayoutManager(new LinearLayoutManager(this));

        RecyclerView.Adapter adapter =
new Adapter_for_RecylerView(data_with_Notes );
        list_with_notes.setAdapter(adapter);
       
//</ show results >
        //----</ load List-View >----

        //--< onClick listener >--
       
((Adapter_for_RecylerView) adapter).setOnItemClickListener(new Adapter_for_RecylerView.OnItemClickListener() {
           
@Override
           
public void onItemClick(View view, int position) {
               
//------< onItemClick() >--------
                //< get Row_Fields >
                
String sPosition=String.valueOf(position);
                TextView item_lblID=view.findViewById(R.id.
lblID);
                TextView item_lblTitle=view.findViewById(R.id.
lblTitle);
                String sID=item_lblID.getText().toString();
                String sTitle=item_lblTitle.getText().toString();
               
//</ get Row_Fields >

                //-< set active_elements >
//                TextView lblIDNote=findViewById(R.id.IDNote);
//                lblIDNote.setText(sID);
//                EditText edit=findViewById(R.id.editTitle);
//                edit.setText(sTitle);
                //-</ set active_elements >

                //< show >
               
Toast.makeText(MainActivity.this, "position=" + position + " Title=" + sTitle + " ID=" + sID, Toast.LENGTH_SHORT).show();
               
//</ show >
                //------< onItemClick() >--------
           
}
        });
       
//--</ onClick listener >--

        //------------</ load_RecyclerView_List() >------------
   
}

}

 

 

 

 

 

Daten-Klasse

Die Daten strukturiert man am Besten in einer Daten-Klasse. Hier werden einfach Daten zusammengefasst wie Notizen bestehen aus Titel und Text und einem Datum

 

package com.codedocu.demo07_recyclerview;

import java.util.Date;

public class DataModel_Note {
   
//----------< DataModel: Note >------------
    //< inner >
   
public Long IDNote;
   
public String Title;
   
public String Text;
   
public Date dtNote;
   
public Date dtEdit;
   
//</ inner >

   
public DataModel_Note(long IDNote, String sTitle)
    {
       
this.IDNote=IDNote;
       
this.Title=sTitle;
    }
   
//----------< DataModel: Note >------------
}