Position in einer List<String> ermitteln

  • Antworten:7
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 62

17.02.2019, 11:35:49 via Website

Hallo zusammen

Ich habe ein Array aus List "String". Nun möchte ich ermitteln in welchem Feld der Cursor steht. Also den Index in Erfahrung bringen. Ich kann über den Index den Inhalt auslesen oder ich kann über den Inhalt den Index erkennen.

Aber wie kann ich den Index ermitteln ohne den Inhalt zu kennen sondern nur über den Cursorposition?

Gruss Renato

Diskutiere mit!
Beste Antwort
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.322

19.02.2019, 10:03:22 via Website

Hallo Renato,

der Adapter adaptiert ;) wie der Name schon sagt von einer Liste auf die Datenquelle einer ListView.

Den Listener musst du bei der ListView definieren:
https://stackoverflow.com/a/8846824/4975457

Da bekommst du dann auch die Position mitgeteilt und kannst damit weiterarbeiten.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.322

17.02.2019, 12:32:03 via Website

Hallo Renato,

ich glaube deine Frage ist etwas ungünstig forumliert.

Wenn du eine List<String> hast und dahinter steckt z.b. ein ArrayList o.ä., dann hast du nur die Möglichkeit entweder über indexOf(String) den Index eines Strings oder mit get(index) das Element am Index zu holen.

Was meinst du genau mit "Cursor" (sowas gibt es meist in Zusammenhang mit einer DB)?
Hast du vlt. eine ListView oder besser RecyclerView und du willst den aktuellen Index bestimmen?
Erkläre genauer, was du vor hast, dann versteht man es auch.

Ein Cursor im herkömmlichen Sinne (bei welchem Index du gerade bist), ist i.d.r kaum Sinvoll.
Meist definiert man sich ein Integer, der dann z.b. in einer Schleife als zähler dient, d.h. zum durchiterieren

— geändert am 17.02.2019, 12:34:36

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 62

17.02.2019, 17:56:04 via Website

Ciao Pascal

Möglicherweise hast du Recht. Ich will mit dem Kopf durch die Wand.

Ich habe ein Adapter welcher ich mit einem ListArray befülle. Nun möchte ich ermitteln in welcher Zelle ich mich befinde. Da bin ich wohl auf dem falschen Weg wenn ich dies im Array versuche. Ich denke, dass es einfacher ist, wenn ich dies im Adapter nach schaue?

Gruss Renato

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.322

17.02.2019, 18:09:03 via Website

Hallo Renato,

genau, aber hier kommt es darauf an wie du das im Detail machst.
Zeig mal deinen Code.

Wieso willst du das bestimmen?
Normalerweise definiert man sich einen ItemClickListener, der dann aufgerufen wird, wenn man einen Eintrag anklickt, da bekommt man die Postion in der ArrayList gleich mitgegeben.
Wenn du das allerdings ohne Listener rausbekommen willst, musst du schauen, was das "FirstVisibleChild" ist etc.

Aber: Wie schon gesagt: Was hast du vor? Mit einer Erklärung was du machen willst, kann man dir mehr helfen als mit so dürftigen Infos.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 62

18.02.2019, 20:56:49 via Website

Ciao Pascal

Herzlichen Dank für deine Geduld. Ich bin wohl immer noch in der Welt von Windows hängen geblieben.
Also ich möchte folgendes machen:

image

In der Mitte des Bildschirms habe ich ein Adapter mit zwei Feldern "Strings". Mit den Buttons unten möchte ich den Adapter steuern. Wenn ich auf Plus klicke soll eine neue Zeile eingefügt werden und beim X soll eine Zeile gelöscht werden. Damit ich in der List den richtigen Eintrag lösche muss ich wissen in welchem Feld sich der Benutzer gerade befindet.
So wie ich deine Antwort interpretiere muss ich im Adapter die aktuelle Position erfragen. Ich weiss aber nicht wie ich das machen kann.

Gruss Renato

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.322

19.02.2019, 00:34:48 via App

Hallo Renato,

das funktioniert so nicht, da die ListViews kein Cursor in dem Sinne haben.

Überlege dir bei sowas mal, wie das andere Apps machen.

Normalerweise legt man solche Aktionen auf einen Longclick der Listitems und hat dann ein Popup Menü o.ä. zum löschen.
Im ClickEvent bekommt man dann auch die aktuell angeklickte Position übergeben etc.
D.h. schau dir am besten mal den LongClickListener für ListView Items an.

Hinzufügen sollte mit einem Add auf deine ArrayList und einem Notify deines Adapters zu lösen sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 62

19.02.2019, 09:18:12 via Website

Ciao Pascal

Da habe ich zu wenig Erfahrung. Wo muss ich den LongClickListener definieren? Innerhalb vom Adapter oder ausserhalb.

class listAdapter extends  ArrayAdapter<String>{

    public listAdapter(@NonNull Context context, int resource) {
        super(context, resource);
    }

    @Override
    public int getCount(){
        int n_anzahl = stringListe.size();
        return n_anzahl;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        if(convertView==null){
            convertView = getLayoutInflater().inflate(R.layout.list_element, null);
        }

        TextView datum = (TextView) convertView.findViewById(R.id.edt_datum);
        datum.setText(datume.get(position).toString());

        TextView text = (TextView) convertView.findViewById(R.id.edt_text);
        text.setText(stringListe.get(position));

        return convertView;
    }

    @Override
    public int getPosition(@Nullable String item) {
        return super.getPosition(item);
    }

    @Override
    public void add(@Nullable String object) {
        super.add(object);
    }

    @Override
    public void remove(@Nullable String object) {
        super.remove(object);
    }

    @Nullable
    @Override
    public String getItem(int position) {
        return super.getItem(position);
    }
}

Im Konstruktor des Adapters habe ich keine Möglichkeit um das Listitem anzusprechen. Eine oncreate Methode hat es auch nicht. Ausserhalb des Adapters erscheint mir das ganze nicht Sinnvoll. Kurz gesagt ist stehe am Berg und komme nicht nach oben.

Gruss Renato

Hilfreich?
Diskutiere mit!
Beste Antwort
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.322

19.02.2019, 10:03:22 via Website

Hallo Renato,

der Adapter adaptiert ;) wie der Name schon sagt von einer Liste auf die Datenquelle einer ListView.

Den Listener musst du bei der ListView definieren:
https://stackoverflow.com/a/8846824/4975457

Da bekommst du dann auch die Position mitgeteilt und kannst damit weiterarbeiten.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
Empfohlene Artikel