Wie bekomme ich eine Methode mit verschiedenen Parametern?

9

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:

%Vor%

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 :

%Vor%

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!

    
Hammad Nasir 01.12.2016, 13:22
quelle

3 Antworten

2

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.

%Vor%

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

%Vor%

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

%Vor%

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

%Vor%

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

ausführen %Vor%

Oder

%Vor%     
Haris Qureshi 04.12.2016, 18:11
quelle
1

Versuchen Sie, den gewünschten Wert in der onBindView

zu initialisieren %Vor%     
Niza Siwale 01.12.2016 13:36
quelle
1

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.

    
Doug Simonton 04.12.2016 02:49
quelle