[JAVA] Ich habe die Listenansicht der Android-Entwicklung gemeinsam gesehen

Einführung

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.

Zielperson

Grundlagen der Listenansicht

Listen-Tap-Listener

○ 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)

Tap-Element abrufen

** 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)

Beispielcode


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();
    }
}

Statische Listenansicht

** 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);
        }
    }
}

Dynamische Listenansicht

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

Beispielcode

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

Liste anpassen

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.

DB-Daten neu laden

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.

Beispielcode 1

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

Beispielcode 2

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

Ich habe die Listenansicht der Android-Entwicklung gemeinsam gesehen
Über die Grundlagen der Android-Entwicklung
<Android> Ändern Sie die Hintergrundfarbe der List-Zeile von ListView
Passen Sie die Listenansicht auf Android an
Ich werde den Unterschied zwischen der Entwicklung von Android-Anwendungen und der Entwicklung von iOS-Anwendungen aus der Sicht von iOS-Ingenieuren erläutern
[Java] Löschen Sie die Elemente von List
Ein Neuling versucht, die Android-Ansicht zusammenzufassen (Entwicklung von Android-Anfängern)
Ich habe die Quelle von ArrayList gelesen, die ich gelesen habe
Ich habe die Menüleiste (Optionsmenü) unter Android geöffnet und gesehen.
Ich habe die Quelle von Integer gelesen
Ich habe die Quelle von Long gelesen
Ich habe die Quelle von Short gelesen
Ich habe die Quelle von Byte gelesen
Ich habe die Quelle von String gelesen
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
Android-Entwicklung, wie man den Wert des JSON-Objekts auf null überprüft
Verstehen Sie die Grundlagen von Android Audio Record
Ich habe die interne Verarbeitung von Retrofit untersucht
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
So sortieren Sie eine Liste von SelectItems
Korrigieren Sie den Ansichtsbildschirm der Beitragsseite
Android-Ansicht
Fassen Sie den Lebenszyklus von Java-Objekten zusammen, die bei der Android-Entwicklung berücksichtigt werden müssen
[No.004] Der Bestelllistenbildschirm des Bestellers wurde korrigiert
JAVA: jar, aar, zeige den Inhalt der Datei an
[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Ich habe den Teil von java.net.URL # getPath überprüft
[Android] Listet alle Einstellungselemente auf dem Einstellungsbildschirm auf
Ich habe die Grundlagen der Zeicheneingabe verstanden
Durchsuchen Sie eine Instanz von Tab's View unter Android
Verbessern Sie die Leistung der Docker-Entwicklungsumgebung
Ich habe die Eigenschaften von Java und .NET verglichen
Die Geschichte der Optimierung der Android-App mit libGDX
Ich möchte den Inhalt der Absicht var_dump
Android Studio-Entwicklung zum ersten Mal (für Anfänger)
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe die Anzahl der Taxis mit Ruby überprüft
Probieren Sie Progate Free Edition [Java I]
Beachten Sie, dass ich von den Einstellungen des Android-Projekts von IntelliJ IDEA abhängig war
Einfache statistische Analyse des Geldbetrags aus der von der Mercari Java-Entwicklung durchsuchten Liste