Italian Inizializzazione Imageview a Sender

Xela

Member
Licensed User
Ciao Ragazzi,
sto usando B4X e sto cercando di eliminare una riga da una tabella mediante il numero riga che è contenuto nel tag di un ImageView creata dinamicamente

Questo l'esempio che ho seguito:
Sub Button_Click
Dim b As Button
b = Sender
b.Text = "I've been clicked"
End Sub

Questo il mio codice:
Sub imgDelRow_click
Dim sRow as String
Dim delClick As ImageView
delClick = sender
sRow = imgDel.Tag ' Qui mi da errore
......

Questo l'errore:
frmord_imgdelrow_click (B4A line: 1135)
sRow = imgDel.Tag
java.lang.RuntimeException: Object should first be initialized (ImageView).
Did you forget to call Activity.LoadLayout?
....

Come posso inizializzare in modo corretto delClick affinchè mi restituisca le proprietà del sender?

Grazie
Alex
 

Sagenut

Expert
Licensed User
Longtime User
Devi mettere
B4X:
sRow = delClick.tag
perchè è quella che ora ha il riferimento alla tua Imageview tramite il Sender.
Puoi anche evitare di passare il TAG ad una stringa.
Puoi fare riferimento direttamente al TAG dove useresti la stringa.
 

Star-Dust

Expert
Licensed User
Longtime User
B4X:
Sub imgDelRow_click
Dim delClick As ImageView = sender
Dim sRow as String= delClick .Tag
......
 
Last edited:

Xela

Member
Licensed User
Devi mettere
B4X:
sRow = delClick.tag
perchè è quella che ora ha il riferimento alla tua Imageview tramite il Sender.
Puoi anche evitare di passare il TAG ad una stringa.
Puoi fare riferimento direttamente al TAG dove useresti la stringa.

Grazie per la tua risposta ma il problema no si è risolto

Ho ricavato un piccolo progetto così da sottoporti il caso reale (vedi lblHelpRag_Click e lblHelpRag_LongClick .
Il fatto è che con il vecchio B4A ha sempre funzionato.
Ora nel passaggio a B4X sto riscontrando il problema.

Questo l'errore che continua a darmi:
frmanag_lblhelprag_longclick (B4A line: 360)
Log(SelAnag.Text)
java.lang.RuntimeException: Object should first be initialized (Label).
Did you forget to call Activity.LoadLayout?
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:67)
at anywheresoftware.b4a.objects.TextViewWrapper.getText(TextViewWrapper.java:36)
at XSeO.example.frmanag._lblhelprag_longclick(frmanag.java:936)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
at anywheresoftware.b4a.objects.ViewWrapper$2.onLongClick(ViewWrapper.java:90)
at android.view.View.performLongClickInternal(View.java:6683)
at android.view.View.performLongClick(View.java:6641)
at android.widget.TextView.performLongClick(TextView.java:11385)
at android.view.View.performLongClick(View.java:6659)
at android.view.View$CheckForLongPress.run(View.java:26055)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6702)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
java.lang.RuntimeException: Object should first be initialized (Label).
Did you forget to call Activity.LoadLayout?



Grazie per la tua pazienza
 

Attachments

  • XSeoB4XPage.zip
    468.5 KB · Views: 141

LucaMs

Expert
Licensed User
Longtime User
Lo provo; quando devi esportare un progetto B4xpages, però, usa:

'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True

che è una riga di commento nella B4XMainPage, altrimenti potrebbero mancare dei file.
 

LucaMs

Expert
Licensed User
Longtime User
Ti dico la verità, non ho capito perché ti dia quell'errore. Però posso suggerirti un metodo per evitarlo, rendendo più semplice il sorgente: usa una cCustomListView anziché la ScrollView2D (che poi non sembra che ti serva la 2D ma la normale).

Crei un layout contente le view di quella che è per te una riga della ScrollView2D, nella xCLV carichi un panel per ognuna di queste "righe" (item), e ci carichi quel "Row-layout".

Molto più semplice. Se non hai mai usato xCustomListView, puoi trovare moltissimi esempi sul sito (scegli quelli di Erel, ovviamente).
 

Xela

Member
Licensed User
Grazie Luca
quello che ti ho allegato è un semplice esempio e ho inserito la ScrollView2D perché in altri casi mi serve quella.
La cosa strana è che in alcune situazioni funziona.

A suo tempo ho provato a usare la xCustomListView ma non mi soddisfava ecco perchè ho optato per alimentate dinamicamente dei panel o scrollView.
Faccio lo stesso con VBNet.

Pensi sia il caso di postare sul forum principale?
 

LucaMs

Expert
Licensed User
Longtime User
ecco perchè ho optato per alimentate dinamicamente dei panel o scrollView.
E' esattamente quello che si fa con xCustomListView: crei dinamicamente un panel per ogni "riga", ma senza stare a creare le label (tu ne hai messa una sola, giusto come esempio, suppongo) nel sorgente, le crei nel Designer, in un layout.

Ti assicuro che è tutto molto più semplice e pulito.

Esempio con pseudo-codice:

1 - nel pnlAnag, nel Designer, crei una clvAnag che àncori a tutti i lati nel panel
2 - chiaramente lo dichiari nella pagina (private clvAnag...)
3 - per caricarlo, quasi come hai fatto:

B4X:
For Each AnagItem
    clvAnag.Add(CreaItem(qui tutti i dati)...
Next


Private Sub CreaItem(dati...) As Panel (o B4XView, meglio ancora)
    Dim pnl As Panel = xui.CreatePanel...
    pnl.SetLayoutAnimated(0,.. e dimensioni
    pnl.LoadLayout(layAnagItem) '<--- in layAnagItem metti le label che ti servono
    lblNome.Text = Nome '<--- uno dei dati passato
    lblIndirizzo.Text = Indirizzo ' c.s.
    '...
    Return pnl
End Sub
Poi dichiari le singole label contenute in layAnagItem nella Class_Globals (singolarmente, non degli array)

ed hai finito.
 

LucaMs

Expert
Licensed User
Longtime User
Un esempio al volo di come gestire una xCLV.

Ti basta cambiare le View nel layCVItem (ho messo view a caso, una CheckBox, una Label, una EditText e un paio di Button), i parametri da passare alla costruzione dell'item e gli eventi che ti servono.
 

Attachments

  • xCLVTest.zip
    15.6 KB · Views: 165

Xela

Member
Licensed User
Grazie Luca,
sto proprio riguardando gli esempi della xCLV

Guarderò anche il tuo prezioso aiuto

ti tengo informato

ciao
 

Sagenut

Expert
Licensed User
Longtime User
Oggi non ho avuto tempo, ma vedo che hai ricevuto aiuto da membri di alto livello.
E non ho dubbi sui loro contenuti. :)
 
Top