Ich hole 3 String
-Werte aus der Datenbank und konvertiere sie dann in Long
. Dann berechne ich eine Differenz und setze dann diesen berechneten Long
-Wert in eine Methode als Parameter. Ich verwende FastAdapter .
Die filterRequests(List <Long> l)
ist eine Methode in MainActivity
, die die Logik des Filterns von Anfragen / Inhalten basierend auf der langen l
ausführt.
vollständiger Adapter:
%Vor% Das Problem ist, dass wenn ich log1
protokolliere, alle 3 Werte in Logcat
angezeigt werden, aber wenn ich log2
protokolliere, wird nur die letzte berechnet Wert wird angezeigt und das ist der Wert, mit dem filterRequests(Long l)
aufgerufen wird.
Update - Nach dem Aktualisieren des Adaptercodes zeigt log1
und log2
jetzt Folgendes an:
filterRequests()
Methode ist die Methode, bei der die Logik zum Filtern von Inhalt basierend auf der Zeit ausgeführt wird. Der Parameter, der in filterRequests()
geht, ist holder.diffNowsdtel
, der 3 long
Werte hat und sollte die Logik basierend darauf machen. Wenn der long Wert <=900
ist, hat der Inhalt den langen Wert -1007
sollte angezeigt werden und wenn der lange Wert >900
ist, sollte der Inhalt mit dem langen Wert 2197
und 4003
angezeigt werden.
Hier ist der Code:
%Vor% Protokollwert von lng
:
Was ich möchte ist, dass die Methode filterRequests(Long l)
alle Werte von holder.diffNowsdtelTV.getText().toString()
verwenden und die Logik verwenden soll.
Es tut mir leid für zweideutige Frage. Bitte helfen Sie mir bei diesem Problem!
Was Sie tun
In Ihrem ViewHolder
diffNowsdtel
wird als long
deklariert (der letzte Wert wird gespeichert), wenn Sie sich anmelden log1 Logger
wird angezeigt (letzter Wert von diffNowsdtel
, so dass Ihr Protokoll angezeigt wird Unterschiedliche Werte, weil bindView
viele Male aufruft, wenn Sie Ihre Zeile oder den gesamten Datensatz aktualisieren.
Innerhalb von onMenuItemClick
holen Sie den Wert direkt von Ihrem TextView
, das jetzt -25094 ist, deshalb haben Sie nur einen Wert in Ihrem TextView
und log sagt
Was Sie tun sollten
Setzen Sie das Tag mit holder.diffNowsdtelTV.setTag(your database key or row_id)
und innerhalb Ihres onMenuItemClick
erhalten Sie Ihr Tag mit
Holen Sie jetzt Ihre 3 String
-Werte aus der Datenbank mit dem in someTagName
gespeicherten Wert und führen Sie dann Ihre Berechnungen durch.
Bearbeiten
Tatsächlich benötigen Sie 3 Werte für Ihre Berechnung, während Sie in Ihrer aktuellen Logik nur den letzten Wert in diffNowsdtel
gespeichert haben. Jetzt brauchst du also eine Logik, um deine Werte irgendwo zu speichern und innerhalb von onMenuItemClick
zu verwenden, aber wenn du deine Werte speichern willst, musst du deine diffNowsdtel
in long[]
oder List<Long>
ändern und jeden Wert speichern in es auf jedem bindView
Aufruf, der einige Logik so einfachste Weg braucht, ist Ihre einzigartige Datenbankspalte sagen Primärschlüssel und speichern Sie es in Ihrem GRModelClass
Innerhalb Ihres onMenuItemClick
verwenden Sie primaryDbKey
, um Ihre 3 String
-Werte aus Ihrer Datenbanktabelle (die Sie woanders machen) zu holen und dann Ihre Berechnungen durchzuführen.
Bearbeiten
Sie haben eine Liste mit Long
erstellt, sowohl List
als auch Long
sind keine primitiven Datentypen.
In Ihrer Frage vergleichen Sie primitive und nicht primitive Datentypen. Zum Vergleich sollten beide Seiten eines Komparators die gleichen Datentypen haben.
Was Sie tun:
%Vor% Hier gibt l.get(i)
einen Long
Wert zurück wo 900
ein ganzzahliger Wert ist.
Was Sie tun sollten:
Vergleichen Sie einfach Ihre l.get(i)
mit Long
, indem Sie 900L
Oder
%Vor%Versuchen Sie, den gewünschten Wert in der onBindView
zu initialisieren %Vor%Sie haben in MainActivity ein statisch definiertes Objekt namens filterButton. Jedes Mal, wenn bindView für eine neue Ansicht aufgerufen wird, ersetzt es den Listener für diese Schaltfläche. Wenn Sie auf dieses Menüelement klicken, ruft es nur den Handler auf, den Sie für das letzte Element festgelegt haben, für das bindView aufgerufen wurde. Aus diesem Grund sehen Sie nur einen Protokolleintrag, wenn diese Filterschaltfläche gedrückt wird.
Tags und Links java android instanceof methods android-context