Android Studio - ArrayList - Selected Item ermitteln

J

Joob

Top Contributor
Ich habe eine Arraylist mit Objekten .

Leider finde ich keine Möglichkeit, entweder die Klasse oder die Pos(index) des gerade gewählten Items zu ermitteln.

Hat jemand eine Idee wie man das anstellen muss.



Code:
package com.job.vt;

import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.textfield.TextInputLayout;

import java.util.ArrayList;

public class A1000_VokTestRCAdapter extends RecyclerView.Adapter<A1000_VokTestRCAdapter.rc_a1000_rcviewholder> {

    private ArrayList<A1000_VokTestDataClass> voktestdata;

    public  class rc_a1000_rcviewholder extends RecyclerView.ViewHolder{

        public TextView baselanguage;
        public TextView word;
        public TextInputLayout usersinput;
        public EditText usersimput_edittext;
        public ImageButton showword;
        public ImageButton playsound;


        public rc_a1000_rcviewholder(@NonNull final View itemView) {

            super ( itemView );

            word = itemView.findViewById ( R.id.a1000_word );
            baselanguage = itemView.findViewById ( R.id.a1000_baselanguage );
            usersinput = itemView.findViewById ( R.id.a1000_usersinput );
            usersimput_edittext = itemView.findViewById ( R.id.a1000_usersinput_edittxt );


            showword = itemView.findViewById ( R.id.a1000_showword );
            playsound = itemView.findViewById ( R.id.a1000_playsound );

            usersimput_edittext.setOnFocusChangeListener(new View.OnFocusChangeListener () {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if (!hasFocus) {

//                         Aber wie komme ich an die Position
//                        A1000_VokTestDataClass currentdata =  voktestdata.get(position);

                        Log.d ( "voktest" , "jetzt würde ich speichern : " + usersimput_edittext.getText ( ) + "index : "  );


                    }
                }
            });

            showword.setOnClickListener ( new View.OnClickListener ( ) {
                @Override
                public void onClick(View view) {
                    Log.d ("voktest", "Show was clicked !");
                }
            } );


            playsound.setOnClickListener ( new View.OnClickListener ( ) {
                @Override
                public void onClick(View view) {
                    Log.d ("voktest", "Sound was clicked !");
                }
            } );
        }
    }




    public A1000_VokTestRCAdapter(ArrayList<A1000_VokTestDataClass> testdatafromdb) {
        voktestdata = testdatafromdb;
    }

    @NonNull
    @Override
    public rc_a1000_rcviewholder onCreateViewHolder(@NonNull ViewGroup parent , int viewType) {

        View v = LayoutInflater.from(parent.getContext ()).inflate ( R.layout.activity_a1000_voktest_recyclerview, parent,false );
        rc_a1000_rcviewholder vh = new rc_a1000_rcviewholder ( v );
        return vh;

    }


    @Override
    public void onBindViewHolder(@NonNull rc_a1000_rcviewholder holder , int position) {

        A1000_VokTestDataClass currentdata = voktestdata.get(position);

        holder.baselanguage.setText (currentdata.getBaselanguage ());
        holder.word.setText ( currentdata.getWord () );

    }


    @Override
    public int getItemCount() {

        return voktestdata.size ();
    }



    private void SafeUsersInput (String strusersinput) {


//        A1000_VokTestDataClass currentdata = voktestdata

//        currentdata.setUsersinput ( strusersinput );
    }
}
 
J

Joob

Top Contributor
Ich habe die Bezeichner so gewählt um besser von anderen Activities abzugrenzen.

Leider ist dein Beispiel bezogen auf onClick
ich müsste aber onSelected verwenden.

Habe das auch schon versucht, mit einem Interface, allerdings wird mir das onItemSelected nicht im Contructor angeboten, nur das onClick, aber damit kann ich nichts tun da der User nicht zwingend auf die Card klicken muss.

Ich versuch mich daran zu arbeiten indem ich die Videos von coding on flow nachvollziehe und dabei entsprechend umbaue.

https://codinginflow.com/tutorials/android/recyclerview-cardview/part-4-onitemclicklistener
 
J

Joob

Top Contributor
Was meinst du mit aktuellerItem ?


Ich habe eine Lösung die auch hinsichtlich der Datenklasse funktioniert, allerdings verschieben sich die Eingaben in den Eingabefeldern.

Hier erst mal meine Lösung :
Code:
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.textfield.TextInputLayout;

import java.util.ArrayList;

public class A1000_VokTestRCAdapter extends RecyclerView.Adapter<A1000_VokTestRCAdapter.rc_a1000_rcviewholder> {

    private ArrayList<A1000_VokTestDataClass> voktestdata;


    public static  class rc_a1000_rcviewholder extends RecyclerView.ViewHolder{

        public TextView baselanguage;
        public TextView word;
        public TextInputLayout usersinput;
        public EditText usersimput_edittext;
        public ImageButton showword;
        public ImageButton playsound;
        public RecyclerView rc;


        public   rc_a1000_rcviewholder(@NonNull final View itemView, final ArrayList<A1000_VokTestDataClass> voktestdata) {


            super ( itemView );

            rc = itemView.findViewById ( R.id.a1000_rv_testvoks );

            word = itemView.findViewById ( R.id.a1000_word );
            baselanguage = itemView.findViewById ( R.id.a1000_baselanguage );
            usersinput = itemView.findViewById ( R.id.a1000_usersinput );
            usersimput_edittext = itemView.findViewById ( R.id.a1000_usersinput_edittxt );


            showword = itemView.findViewById ( R.id.a1000_showword );
            playsound = itemView.findViewById ( R.id.a1000_playsound );



            usersimput_edittext.setOnFocusChangeListener(new View.OnFocusChangeListener () {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if (!hasFocus) {

                         int position = getAdapterPosition ();
                        A1000_VokTestDataClass currentdata =  voktestdata.get(position);
                        currentdata.setUsersinput ( usersimput_edittext.getText ( ).toString () );

                        Log.d ( "voktest" , "jetzt würde ich speichern : " + usersimput_edittext.getText ( ) + "index : " + position );

                    }
                }
            });

            showword.setOnClickListener ( new View.OnClickListener ( ) {
                @Override
                public void onClick(View view) {
                    Log.d ("voktest", "Show was clicked !");
                }
            } );


            playsound.setOnClickListener ( new View.OnClickListener ( ) {
                @Override
                public void onClick(View view) {
                    Log.d ("voktest", "Sound was clicked !");
                }
            } );
        }


    }




    public A1000_VokTestRCAdapter(ArrayList<A1000_VokTestDataClass> testdatafromdb) {
        voktestdata = testdatafromdb;
    }

    @NonNull
    @Override
    public rc_a1000_rcviewholder onCreateViewHolder(@NonNull ViewGroup parent , int viewType) {

        View v = LayoutInflater.from(parent.getContext ()).inflate ( R.layout.activity_a1000_voktest_recyclerview, parent,false );
        rc_a1000_rcviewholder vh = new rc_a1000_rcviewholder ( v,  voktestdata );
        return vh;

    }


    @Override
    public void onBindViewHolder(@NonNull rc_a1000_rcviewholder holder , int position) {

        A1000_VokTestDataClass currentdata = voktestdata.get(position);

        holder.baselanguage.setText (currentdata.getBaselanguage ());
        holder.word.setText ( currentdata.getWord () );

    }


    @Override
    public int getItemCount() {

        return voktestdata.size ();
    }



    private void SafeUsersInput (String strusersinput) {


//        A1000_VokTestDataClass currentdata = voktestdata

//        currentdata.setUsersinput ( strusersinput );
    }
}


Dann habe ich die Daten ja bei der Eingabe protokoliert, da sieht auch alles gut aus.
Der zweite Bereich gibt die Datenklasse nach Eingabe aus. (Achtung habe das Leerzeichen vor index vergessen.)

2019-08-08 20:43:19.175 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : index : 0
2019-08-08 20:49:20.001 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 1 alleindex : 0
2019-08-08 20:49:29.939 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 2 assianindex : 1
2019-08-08 20:49:31.229 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 2 assianindex : 1
2019-08-08 20:49:50.060 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 3 welkommindex : 2
2019-08-08 20:49:59.971 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 4 Bootindex : 3
2019-08-08 20:50:11.600 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 5 aligatorindex : 4
2019-08-08 20:50:39.812 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 6 coupeindex : 5
2019-08-08 20:51:02.366 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 7 bitteindex : 6
2019-08-08 20:51:15.629 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 8 33index : 7
2019-08-08 20:51:31.709 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 9 test 3index : 8
2019-08-08 20:51:32.815 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 9 test 3index : 8
2019-08-08 20:51:55.237 5527-5527/com.job.vt D/voktest: jetzt würde ich speichern : 10 33index : 9

Datenklasse ausgegeben
2019-08-08 20:52:20.905 5527-5527/com.job.vt D/voktest: Baselanguage : alle / usersinput : 1 alle
2019-08-08 20:52:20.905 5527-5527/com.job.vt D/voktest: Baselanguage : asiante / usersinput : 2 assian
2019-08-08 20:52:20.906 5527-5527/com.job.vt D/voktest: Baselanguage : Willkommen / usersinput : 3 welkomm
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : Boot / usersinput : 4 Boot
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : alligator / usersinput : 5 aligator
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : coupe / usersinput : 6 coupe
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : Bitte / usersinput : 7 bitte
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : 33 / usersinput : 8 33
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : 3ter test / usersinput : 9 test 3
2019-08-08 20:52:20.907 5527-5527/com.job.vt D/voktest: Baselanguage : 33 / usersinput : 10 33


In der Anzeige erscheint dann aber plötzlich so etwas:

für die Lesbarkeit, oben sieht man das unter alle auch alle gespeichert wurde, (sieht man im Codebeispiel)
und in beim auslesen der Datenklasse ist das auch genau dort gespeichert.
Gibt es da etwas zu berücksichtigen wenn man TextInputLayout in den Cards verwendet ?

12309
 

Anhänge

  • 1565292077299.png
    1565292077299.png
    11,9 KB · Aufrufe: 36
J

Joob

Top Contributor
Ach ja, das geht nur wenn die Liste nicht erweitert oder verkleinert oder sortiert wird.
Das ist bei mir gerade der Fall, aber richtig wäre es den Verweis auf das Objekts aus der Auswahl zu lesen.
 
J

Joob

Top Contributor
Aber wie, oder wo kann ich mir das anschauen, mit rumprobieren kann das lange dauern.
Hast du vielleicht eine Link ?
 
J

Javinner

Top Contributor
Java:
public class GameObject
{

    private Itemable currentItem;

    private final List<Itemable> itemList;

    public GameObject()
    {
        this.itemList = new ArrayList<>();
    }

    public void addToList(Itemable item)
    {
        this.itemList.add(item);
        this.currentItem = item;
    }

    public String getCurrentItemName()
    {
        return this.currentItem.getName();
    }

}

public class ItemDemo
{

  
    public static void main(String[] args)
    {
        GameObject object = new GameObject();
        
        object.addToList(new Knife());
        System.out.println(object.getCurrentItemName());
        
        object.addToList(new Glasses());
        System.out.println(object.getCurrentItemName());
        
        object.addToList(new Telescope());
        System.out.println(object.getCurrentItemName());
    }
    
}

/** Output */
Knife
Glasses
Telescope
 
J

Joob

Top Contributor
Danke,
habs gerade noch gelesen,
bin aber jetzt die nächsten Tage schwer beschäftigt.
Melde mich in ein paar Tagen noch mal.
 
J

Joob

Top Contributor
Hallo ,

hinsichtlich des Darstellungsproblems :

Der Inhalt der Textfelder wird nach dem scrollen durcheinandergewürfelt.
Wenn du das Protokoll ansiehst, erkennst du das alles korrekt in der Klasse gespeichert ist.

Auf den Screenshots, siehst du die Anzeige nach dem Scrollen.
 
J

Joob

Top Contributor
Habe die Ursache gefunde, hatte etwas im Adapter vergessen.
Schönen Dank für euere Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
lolcore Android Studio -Download Documentation for Android SDK Android & Cross-Platform Mobile Apps 0
W Problem mit Android Studio Android & Cross-Platform Mobile Apps 0
OSchriever Auf onClick-Listener reagieren und Parameter übergeben (Android Studio) Android & Cross-Platform Mobile Apps 4
W Variable überschreiben (Android Studio) Android & Cross-Platform Mobile Apps 2
jmar83 Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
jmar83 Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Komponenten positionieren in Android Studio 3.6.3 Android & Cross-Platform Mobile Apps 1
M Android Studio - Property-Fenster einblenden Android & Cross-Platform Mobile Apps 1
M Android Studio - App auf dem Smartphone testen Android & Cross-Platform Mobile Apps 7
M Android Studio - Configuration fehlt Android & Cross-Platform Mobile Apps 20
M Unsupported class file major version 57 - Fehlermeldung bei Android Studio Android & Cross-Platform Mobile Apps 27
jmar83 Android Studio (SDK) ANDROID_SDK_ROOT-Variable? Android & Cross-Platform Mobile Apps 5
J Android Studio macht seltsame Sachen Android & Cross-Platform Mobile Apps 2
J Android 9.1 aber android Studio findet API22 Android & Cross-Platform Mobile Apps 0
Dimax Web-Seite in native app convertieren mit Android Studio Android & Cross-Platform Mobile Apps 8
A Android Studio: while-Schleife beginnt nicht Android & Cross-Platform Mobile Apps 5
lolcore android studio: fehler bei laden des emulators Android & Cross-Platform Mobile Apps 10
A Android-Studio: 2. Layout nach kurzer Zeit aufzeigen Android & Cross-Platform Mobile Apps 2
A jpg wird im Android Studio nicht akzeptiert Android & Cross-Platform Mobile Apps 3
A Android Studio: ImageView verpixelt Android & Cross-Platform Mobile Apps 2
J intend Service im Android Studio Android & Cross-Platform Mobile Apps 4
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
A Android Studio - App mit Nearby Android & Cross-Platform Mobile Apps 1
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
E Wie erhalte ich Zugriff auf das Microfon? (Android Studio) Android & Cross-Platform Mobile Apps 9
L Android Android Studio - Exportierte APK funktioniert nicht Android & Cross-Platform Mobile Apps 6
A Beginnen mit Serverkommunikatsion in Android Studio Android & Cross-Platform Mobile Apps 6
E Android Studio Android & Cross-Platform Mobile Apps 15
L Android Android Studio Setup killt Explorer Android & Cross-Platform Mobile Apps 3
J Variable in strings.xml (Android Studio) Android & Cross-Platform Mobile Apps 0
B Android Android Studio lässt PC abstürzen Android & Cross-Platform Mobile Apps 3
Light Lux Fehlermeldung unter Android Studio Android & Cross-Platform Mobile Apps 1
A Android Android Studio Emulator Problem Android & Cross-Platform Mobile Apps 1
S Android Studio Bluetooth App Problem Android & Cross-Platform Mobile Apps 6
Maresuke Android Android Studio & Bitbucket Android & Cross-Platform Mobile Apps 0
S Software-Tastatur des Android-Studio-Emulators öffnen? Android & Cross-Platform Mobile Apps 0
S Android Studio Emulator falsch eingestellt? Android & Cross-Platform Mobile Apps 1
N Blackscreen bei while-Schleife? (Android-Studio) Android & Cross-Platform Mobile Apps 2
S Android Studio MySql Daten in Listview mit sub Item Android & Cross-Platform Mobile Apps 11
S Android studio, SSH an Raspberry Android & Cross-Platform Mobile Apps 14
H Android Android Studio mit NDK ünterstützung, wann? Android & Cross-Platform Mobile Apps 1
T Android MSSQL Verbindung herstellen - Android Studio Android & Cross-Platform Mobile Apps 2
J Is Android Development Head First Outdated? Android & Cross-Platform Mobile Apps 3
J Android Android Datenbankverbindung zum Raspberry Pi Android & Cross-Platform Mobile Apps 1
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
W App Abo Android Android & Cross-Platform Mobile Apps 10
OSchriever Android Android MediaPlayer bei Anruf stoppen/pausieren Android & Cross-Platform Mobile Apps 2
W removeNetwork Android App mit Spendenaktion fürs Tierheim! Android & Cross-Platform Mobile Apps 1
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
P undefinierbarer Fehler Android Android & Cross-Platform Mobile Apps 8
T Android ArrayList sortieren mit 2 Werten ohne thencomparing , Wie? Android & Cross-Platform Mobile Apps 10
jmar83 Android Selbst entwickelter SMTP-Client läuft auf PC, nicht aber auf Android Android & Cross-Platform Mobile Apps 9
jmar83 Android Wo das 'android.useAndroidX' property hinzufügen? Android & Cross-Platform Mobile Apps 8
jmar83 Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
P Login und Registrierung Android Anzeige Android & Cross-Platform Mobile Apps 7
S Von JavaFx zu Android Android & Cross-Platform Mobile Apps 12
K Android to Pi | Websocket Problem Android & Cross-Platform Mobile Apps 3
M Barrierefreie Appentwicklung für Android - Suche Codebeispiele Android & Cross-Platform Mobile Apps 8
M Wo kann ich das Android SDK herunterladen / wie kann ich es installieren Android & Cross-Platform Mobile Apps 3
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
T Android SDK-Manager startet nicht in Eclipse Android & Cross-Platform Mobile Apps 5
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
J Was soll das bedeuten ? does not require android.permission.BIND_JOB_SERVICE permission Android & Cross-Platform Mobile Apps 7
L Android Android Development eventuell mit Flutter Android & Cross-Platform Mobile Apps 1
S Android Layout - welchen Typ? Android & Cross-Platform Mobile Apps 3
L Android Android Contacts DB auslesen Android & Cross-Platform Mobile Apps 1
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
N Android Game Background Service Android & Cross-Platform Mobile Apps 11
Excess Android Service läuft nicht in Sandby weiter Android & Cross-Platform Mobile Apps 2
B Android Projekt für Android und IOS erstellen? Android & Cross-Platform Mobile Apps 5
J App funktioniert auf Android 5, auf 6 nicht Android & Cross-Platform Mobile Apps 2
J Android Snake Android & Cross-Platform Mobile Apps 15
J Android TaschenRechner Android & Cross-Platform Mobile Apps 22
I Das Problem mit der Tastatur... android:windowSoftInputMode="adjustPan" Android & Cross-Platform Mobile Apps 1
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
B Android Kein Zugriff auf Telefonspeicher (Android 6) Android & Cross-Platform Mobile Apps 1
T Android Equalizer für Android Android & Cross-Platform Mobile Apps 3
L Android Methode funktioniert nicht unter Android Android & Cross-Platform Mobile Apps 3
K Android Videos rendern Android & Cross-Platform Mobile Apps 1
B Android App Fehler Android & Cross-Platform Mobile Apps 21
J android Spinner funktioniert nicht Android & Cross-Platform Mobile Apps 14
G Android Push Notification Android & Cross-Platform Mobile Apps 2
D Android Android Apps direkt vom Handy aus programmieren? Android & Cross-Platform Mobile Apps 2
L Android Android Kalendar Tag Ansicht Android & Cross-Platform Mobile Apps 1
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3
L Android Texterkennung für Android? Android & Cross-Platform Mobile Apps 1
L Android Chart API für Android Android & Cross-Platform Mobile Apps 0
L Android SQLite mit HSQLDB über Android synchronisieren Android & Cross-Platform Mobile Apps 13
B Android Text von Android zu PC senden? Android & Cross-Platform Mobile Apps 5
ATZENPOWER Android Probleme mit mobilen Daten via lte Android & Cross-Platform Mobile Apps 10
J standardmässige Persistenz bei Android Android & Cross-Platform Mobile Apps 2
Dechasa Android Android - Canvas NullpointException Android & Cross-Platform Mobile Apps 2
L Android Android exportierte XML einlesen Android & Cross-Platform Mobile Apps 2
T Android Programm zu Android-App Android & Cross-Platform Mobile Apps 4
Florum Android FTP Upload über Android Android & Cross-Platform Mobile Apps 15
P Android Android-App Crash - Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 2
S Android Unfortunately, the process com.android.phone has stopped Android & Cross-Platform Mobile Apps 0

Ähnliche Java Themen

Anzeige

Neue Themen


Oben