Hallo. Ich bin Wataku, ein serverseitiger Programmierer, der an einer bestimmten Schule Programmieren studiert. : entspannt: Lassen Sie uns auch dieses Mal Android entwickeln. Da es verschiedene Möglichkeiten gibt, Listenansichten auf Android anzuzeigen, bin ich selbst verwirrt und möchte mit dem Teufel schlafen.
○ Listener-Klasse beim Tippen auf die Listenansicht: ** onItemClickListener ** Implementieren Sie die Schnittstelle.
* Diese Schnittstelle ist eine Mitgliedsschnittstelle der AdapterView-Klasse
○ Listeneinstellungsmethode
setOnItemClickListener(Fügen Sie die Member-Schnittstelle ein, die onItemClickListener implementiert)
** 1) Ereignishandler: onItemClick () ** 4 Argumente
1.AdapterView<?> parent
->Die gesamte getippte ListView
2.View view
->Eine Reihe von abgegriffenen Bildschirmteilen
3.int position
->Getippte Zeilennummer
* Ab 0
4.long id
->Primärschlüsselwert, wenn ListView basierend auf DB-Daten generiert wird
* Wenn DB nicht verwendet wird, der gleiche Wert wie an der obigen Position
** 2) Datenerfassung ** ○ Die Daten der abgegriffenen Linie können über Eltern und Position abgerufen werden.
(String)parent.getItemAtPosition(position)
private class ListItemClickListener implements AdapterView.OnItemClickListener {
public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
String item = (String)parent.getItemAtPosition(position);
Toast.makeText(ListClickSampleActivity.this, show, Toast.LENGTH_SHORT).show();
}
}
** 1) Mit XML erstellen **
activity_list_click_sample.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lvMenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/lv_menu"/>
string.xml
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<string name="app_name">Listenauswahlbeispiel</string>
<string-array name="lv_menu">
<item>Gebratenes Huhn</item>
<item>Hamburger Set Mahlzeit</item>
<item>Ingwer gegrilltes Menü</item>
<item>Steak Set Mahlzeit</item>
<item>Gebratenes Gemüse zum Essen</item>
<item>Zeit Topf Fleisch Set Mahlzeit</item>
<item>Mao Tofu Set Mahlzeit</item>
<item>Tonkatsu stellte Mahlzeit ein</item>
<item>Gehackte Schnitzel-Mahlzeit</item>
<item>Hühnchen und festes Essen</item>
<item>Krokettenmahlzeit</item>
<item>Gegrilltes Fischgericht</item>
<item>Gegrilltes Fleischmenü</item>
<item>Schwaches Fleisch und starkes Essen</item>
</string-array>
</resources>
ListClickSampleActivity.java
public class ListClickSampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_click_sample);
ListView lvMenu = findViewById(R.id.lvMenu);
lvMenu.setOnItemClickListener(ListItemClickListener);
}
AdapterView.OnItemClickListener ListItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
String item = (String)parent.getItemAtPosition(position);
String show = "Stellen Sie eine Mahlzeit Ihrer Wahl ein:" + item;
Toast.makeText(ListClickSampleActivity.this, show, Toast.LENGTH_SHORT).show();
}
};
}
** 2) Mit Java-Code erstellen **
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lvPref"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
PrefListActivity.java
public class PrefListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pref_list);
ListView lvPref = findViewById(R.id.lvPref);
List<String> prefList = createPrefectureList();
ArrayAdapter<String> adapter = new ArrayAdapter<>(PrefListActivity.this, android.R.layout.simple_list_item_1, prefList);
lvPref.setAdapter(adapter);
lvPref.setOnItemClickListener(new ListItemClickListener());
}
/**
*Eine Methode zum Generieren einer Statusliste.
* @Rückgabestatuslistenobjekt.
*/
private List<String> createPrefectureList() {
List<String> prefList = new ArrayList<>();
prefList.add("Hokkaido");
prefList.add("Präfektur Aomori");
prefList.add("Präfektur Iwate");
prefList.add("Präfektur Miyagi");
prefList.add("Akita");
prefList.add("Präfektur Yamagata");
prefList.add("Präfektur Fukushima");
prefList.add("Präfektur Ibaraki");
prefList.add("Präfektur Tochigi");
prefList.add("Präfektur Gunma");
prefList.add("Saitama");
prefList.add("Präfektur Chiba");
prefList.add("Tokio");
prefList.add("Präfektur Kanagawa");
prefList.add("Präfektur Niigata");
prefList.add("Präfektur Toyama");
prefList.add("Präfektur Ishikawa");
prefList.add("Präfektur Fukui");
prefList.add("Präfektur Yamanashi");
prefList.add("Präfektur Nagano");
prefList.add("Präfektur Gifu");
prefList.add("Präfektur Shizuoka");
prefList.add("Präfektur Aichi");
prefList.add("Präfektur Mie");
prefList.add("Präfektur Shiga");
prefList.add("Kyoto");
prefList.add("Präfektur Osaka");
prefList.add("Präfektur Hyogo");
prefList.add("Präfektur Nara");
prefList.add("Präfektur Wakayama");
prefList.add("Präfektur Tottori");
prefList.add("Präfektur Shimane");
prefList.add("Präfektur Okayama");
prefList.add("Präfektur Hiroshima");
prefList.add("Präfektur Yamaguchi");
prefList.add("Präfektur Tokushima");
prefList.add("Präfektur Kagawa");
prefList.add("Präfektur Ehime");
prefList.add("Präfektur Kochi");
prefList.add("Präfektur Fukuoka");
prefList.add("Präfektur Saga");
prefList.add("Präfektur Nagasaki");
prefList.add("Präfektur Kumamoto");
prefList.add("Präfektur Oita");
prefList.add("Präfektur Miyazaki");
prefList.add("Präfektur Kagoshima");
prefList.add("Präfektur Okinawa");
return prefList;
}
/**
*Eine Mitgliedsklasse, die beschreibt, was passiert, wenn eine Liste ausgewählt wird.
*Übertragen Sie den Prozess auf den zweiten Bildschirm.
*/
private class ListItemClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String prefName = (String) parent.getItemAtPosition(position);
Intent intent = new Intent(PrefListActivity.this, PrefEditActivity.class);
intent.putExtra("selectedPrefNo", position);
intent.putExtra("selectedPrefName", prefName);
startActivity(intent);
}
}
}
Verwenden Sie die Klasse ** SimpleCursorAdapter **. → Verwenden Sie diese Option, wenn Sie eine Listenansicht basierend auf den Daten in der Datenbank erstellen möchten. 6 Argumente
1.Kontext
2.R-Wert, der das Layout jeder Zeile in der Listenansicht darstellt
*simple_list_view_item_1 ist normalerweise gut.
3.Cursorobjekt
4.String[] :Array von Spaltennamen
5.int[] :Anordnung der R-Werte von Bildschirmteilen
6.0 ist in Ordnung
So zeigen Sie dies in der Listenansicht an (registrieren es) -> Verwenden Sie die ** setAdapter ** -Methode der ListView-Klasse
MemoListActivity.java
public class MemoListActivity extends AppCompatActivity {
private ListView _lvMemoList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memo_list);
_lvMemoList = findViewById(R.id.lvMemoList);
_lvMemoList.setOnItemClickListener(new ListItemClickListener());
}
@Override
protected void onResume() {
super.onResume();
DatabaseHelper helper = new DatabaseHelper(MemoListActivity.this);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = DataAccess.findAll(db);
String[] from = {"title"};
int[] to = {android.R.id.text1};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MemoListActivity.this, android.R.layout.simple_list_item_1, cursor, from, to, 0);
_lvMemoList.setAdapter(adapter);
}
}
onResume: Methode zum Aktualisieren des Bildschirms
Verwenden Sie ** SimpleAdapter **. row Gehen Sie wie folgt vor, um jede Zeile in der Listenansicht anzupassen: ** 1) Bereiten Sie eine Layout-XML-Datei für eine Zeile vor ** -> Das Schreiben einer XML-Datei entspricht einer normalen Layoutdatei
res/layout/row.xml
<LinearLayout ... >
<ImageView ... />
<TextView ... />
<TextView ... />
<TextView ... />
</LinearLayout>
* Dateiname kann alles sein
** 2) Geben Sie den R-Wert der Datei in 1) in dem Argument an, das das Layout angibt, wenn Sie den Adapter neu erstellen. ** ** **
(ex.)
new.SimpleAdapter( ..., _list, R.layout.row, ... );
** 3) Geben Sie im int-Array des Arguments to bei der Neuerung der Adapterklasse den in der Datei 1) beschriebenen R-Wert von id an. ** ** **
(ex.)
int[] to = {R.id.tvMenuName, R.id.tvMenuPrice}
ViewBinder
** (1) Was ist ViewBinder **
Sie können row.xml verwenden, um das Layout vor der Listenansicht anzupassen.
Wie kann man dann den Anzeigeinhalt jeder Zeile entsprechend den Daten ändern?
Erstellen Sie Ihren eigenen Prozess zum Zuweisen von Daten zu Bildschirmteilen, indem Sie von-zu kombinieren (ViewBinder erstellen). Gehen Sie dazu wie folgt vor.
** 1) Erstellen Sie eine Klasse, die die SimpleAdapter.ViewBinder-Schnittstelle implementiert. -> Private Mitgliederklasse ist in Ordnung **
** 2) Beschreiben Sie den Datenzuweisungsprozess für das Screening von Teilen in der setViewValue () -Methode dieser Klasse. (Siehe unten) **
** 3) Übergeben Sie eine neue Version dieser Klasse an die setViewBinder () -Methode der Adapterklasse **
(ex.)
private class CustomViewBinder implement SimpleAdapter.ViewBinder {
@Override
public boolean setViewValue() {
Beschreiben Sie hier die Datenzuordnung der Bildschirmteile in jeder Zeile
}
}
adapter.setViewBinder(new CustomViewBinder());
** (2) Argument von setViewValue () ** Die Argumente der setViewValue () -Methode sind die folgenden drei.
1. View view :Bildschirmteile in einer Zeile.
2. Object data :Die Daten, die dem ersten Argument oben zugewiesen werden sollen.
3. String textReprosentation :Eine Zeichenfolge des Inhalts des zweiten Arguments. Wenn das zweite Argument null ist
Leere Zeichenfolge.
** (3) Verarbeitungsmuster in setViewValue () ** Verzweigen Sie in setViewValue () mit der ID der Argumentansicht und beschreiben Sie den Prozess anhand der Argumentdaten. → Die switch-Anweisung ist praktisch.
public booelan setViewValue ( .... ) {
int viewId = view.getId();← ID abrufen
switch( viewId ) {← Verzweigungsverarbeitung nach ID(switch)
case R . id . imPhoneType :← R-Wert, da es sich um einen Vergleich zwischen IDs handelt
ImageView imPhoneType = ( ImageView ) view;
int phoneType = ( Integer ) data;
Dann mach was du willst.
return true;
case .....
}
return false
}
Beschreiben Sie in der Methode setViewValue () den ursprünglichen Prozess zum Einbetten von Daten in die Ansicht, dh beschreiben Sie die Rückgabe true am Ende jedes Falls. Schreiben Sie außerdem am Ende der Methode return false. → Anhand dieses Rückgabewerts wird beurteilt, ob Daten auf der Betriebssystemseite eingebettet werden sollen oder nicht.
** (4) Für SimpleCursorAdapter ** Selbst im Fall von SimpleCursorAdapter ist die Verarbeitung von setViewValue () von ViewBinder dieselbe wie die von SimpleAdapter.
view . getId()Verzweigen Sie den Wert von mit einem Schalter. Die Argumente sind jedoch die folgenden drei.
1. View view :Bildschirmteile in einer Zeile der Liste.
2. Cursor cursor :Ein Cursorobjekt, das Daten für eine Zeile der Zielliste enthält.
3. int columnIndex :Der Spaltenindex der Daten, die dem ersten Argument oben zugewiesen werden sollen.
Wenn die Daten in der Datenbank aktualisiert werden, bei denen es sich um die Originaldaten der Listenansicht handelt, müssen die Daten aus der Datenbank abgerufen und erneut angezeigt werden.
○ Der folgende Quellcode.
SimpleCursorAdapter adapter = ( SimpleCursorAdapter ) _lvPhones . getAdapter();
adapter . changeCursor( cursor );← Tauschen Sie den Cursor. Neuer Cursor
(Hinweis)
Wenn Sie den Adapter mit onCreate () setzen und den Cursor mit onResume () setzen (ersetzen) möchten, können Sie beim Argumentieren von SimpleCursorAdapter in onCreate () null an den Argumentcursor übergeben.
public class CustomizedListView2Activity extends AppCompatActivity {
/**
*Listendaten, die in der Listenansicht angezeigt werden sollen.
*/
private List<Map<String, Object>> _list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customized_list_view2);
_list = createList();
String[] from = {"phoneType", "phoneNo", "phoneSex"};
int[] to = {R.id.imPhoneType, R.id.tvPhoneNo, R.id.tvSex};
SimpleAdapter adapter = new SimpleAdapter(CustomizedListView2Activity.this, _list, R.layout.row, from, to);
adapter.setViewBinder(new CustomViewBinder());
ListView lvPhones = findViewById(R.id.lvPhones);
lvPhones.setAdapter(adapter);
}
/**
*Eine Methode, die die in der Listenansicht angezeigten Listendaten generiert.
*
* @return Die generierten Listendaten.
*/
private List<Map<String, Object>> createList() {
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
int phoneType = (int) (3 * Math.random()) + 1;
int phoneNoInt = (int) (99999999 * Math.random());
int phoneSexInt = (int) (10*Math.random() + 1);
String phoneNo = "090" + String.format("%08d", phoneNoInt);
int phoneSex = 1;
if(phoneSexInt <= 5) {
phoneSex = 0;
}
Map<String, Object> map = new HashMap<>();
map.put("phoneType", phoneType);
map.put("phoneNo", phoneNo);
map.put("phoneSex", phoneSex);
list.add(map);
}
return list;
}
/**
*Benutzerdefinierte Ansichtsordnerklasse für Listenansicht.
*/
private class CustomViewBinder implements SimpleAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Object data, String textRepresentation) {
int viewId = view.getId();
switch(viewId) {
case R.id.imPhoneType:
ImageView imPhoneType = (ImageView) view;
int phoneType = (Integer) data;
switch(phoneType) {
case 2:
imPhoneType.setImageResource(android.R.drawable.ic_menu_crop);
break;
case 3:
imPhoneType.setImageResource(android.R.drawable.ic_menu_myplaces);
break;
default:
imPhoneType.setImageResource(android.R.drawable.ic_menu_call);
break;
}
return true;
case R.id.tvPhoneNo:
TextView tvPhoneNo = (TextView) view;
String phoneNo = (String) data;
tvPhoneNo.setText(phoneNo);
return true;
case R.id.tvSex:
TextView tvSex = (TextView) view;
int phoneSex = (Integer) data;
String sex = "♂";
if(phoneSex == 0) {
sex = "♀";
}
tvSex.setText(sex);
return true;
}
return false;
}
}
}
public class CustomizedListView3Activity extends AppCompatActivity {
private ListView _lvPhones;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customized_list_view3);
_lvPhones = findViewById(R.id.lvPhones);
String[] from = {"phone_type", "phone_no", "phone_sex"};
int[] to = {R.id.imPhoneType, R.id.tvPhoneNo, R.id.tvSex};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(CustomizedListView3Activity.this, R.layout.row, null, from, to, 0);
adapter.setViewBinder(new CustomViewBinder());
_lvPhones.setAdapter(adapter);
}
@Override
public void onResume() {
super.onResume();
setNewCursor();
}
/**
*Eine Methode zum Aktualisieren des Cursors im Cursoradapter.
*/
private void setNewCursor() {
DatabaseHelper helper = new DatabaseHelper(CustomizedListView3Activity.this);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = DataAccess.findAll(db);
SimpleCursorAdapter adapter = (SimpleCursorAdapter) _lvPhones.getAdapter();
adapter.changeCursor(cursor);
}
/**
*Benutzerdefinierte Ansichtsordnerklasse für Listenansicht.
*
* @author Shinzo SAITO
*/
private class CustomViewBinder implements SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
switch(viewId) {
case R.id.imPhoneType:
ImageView imPhoneType = (ImageView) view;
int phoneType = cursor.getInt(columnIndex);
switch(phoneType) {
case 2:
imPhoneType.setImageResource(android.R.drawable.ic_menu_crop);
break;
case 3:
imPhoneType.setImageResource(android.R.drawable.ic_menu_myplaces);
break;
default:
imPhoneType.setImageResource(android.R.drawable.ic_menu_call);
break;
}
return true;
case R.id.tvPhoneNo:
TextView tvPhoneNo = (TextView) view;
String phoneNo = cursor.getString(columnIndex);
tvPhoneNo.setText(phoneNo);
return true;
case R.id.tvSex:
TextView tvSex = (TextView) view;
int phoneSex = cursor.getInt(columnIndex);
String sex = "♂";
if(phoneSex == 0) {
sex = "♀";
}
tvSex.setText(sex);
return true;
}
return false;
}
}
}
das ist alles. Ich habe die Listenansicht auf Android zusammengefasst. Wenn Sie Vorschläge wie etwas falsches haben, kontaktieren Sie uns bitte. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts