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 >------------
}
|