Italian Spostare parte di un'activity in una nuova, si o no?

Luigi S

Member
Licensed User
Ciao a tutti, la mia app attualmente è costituita da due activity la "Main" e "AggiungiModello".

La Main sta diventando corposa (almeno a mio giudizio da niubbo) e volevo sapere se è possibile/conveniente dividerla in due.

B4X:
#Region  Project Attributes
    #ApplicationLabel: RC Hangar
    #VersionCode: 1
    #VersionName: 0.01
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    'Private rp As RuntimePermissions
  
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Private ListModelView As ListView
    Private addPlusButton As Button
      
    Dim ListModel(100) As String
  
    Type ListViewData (FirstRow As String, SecondRow As String, Picture As Bitmap)
  
    Private ModelViewPanel As Panel
    Private BackModelWiewButton As Button
      
    Dim ModelName As String
    Dim Component1 As String
    Dim Component2 As String
    Dim Component3 As String
    Dim Component4 As String
    Dim Component5 As String
    Dim Component6 As String
    Dim Component7 As String
'    Dim Component8 As String
'    Dim Component9 As String
'    Dim Component10 As String

    Private ModelnameLabel As Label
    Private Component1Label As Label
    Private Component2Label As Label
    Private Component3Label As Label
    Private Component4Label As Label
    Private Component5Label As Label
    Private Component6Label As Label
    Private Component7Label As Label
'    Private Component8Label As Label
'    Private Component9Label As Label
'    Private Component10Label As Label
  

    Private EditModelWiewButton As Button
    Private FlyModelWiewButton As Button
    Private MaintenanceModelWiewButton As Button
  
    Private DesComponent1Label As Label
    Private DesComponent2Label As Label
    Private DesComponent3Label As Label
    Private DesComponent4Label As Label
    Private DesComponent5Label As Label
    Private DesComponent6Label As Label
    Private DesComponent7Label As Label
    Private DesModelNameLabel As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    Activity.LoadLayout("Main")
    Activity.Title = "RC hangar"
  
'    LoadListModel 'Forse è meglio metterlo in Resume? da testare
  
  

  
    'ToastMessageShow("if there are no models here, click on add model button",True)
    'MsgboxAsync("se non ci sono modelli inseriscili cliccando sul pulsante + in basso a destra", "Ecco il tuo Hangar")
End Sub

Sub Activity_Resume
    LoadListModel             'per ora sta in Create da testare
  
    ModelViewPanel.Visible = False
  
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub



Sub addPlusButton_Click
    StartActivity(AggiungiModello)
End Sub

Sub LoadListModel
  
    ListModelView.Clear
  
    Dim List1 As List
  
    If File.Exists(File.DirRootExternal, "RCHangar/ListModel.txt") = False Then
        'MsgboxAsync("if there are no models, enter them by clicking on the button + bottom right", "Here is your Hangar")
        MsgboxAsync("se non ci sono modelli inseriscili cliccando sul pulsante + in basso a destra", "Ecco il tuo Hangar")
    End If
  
    'controllo se esiste il file di testo
    If File.Exists(File.DirRootExternal, "RCHangar/ListModel.txt") Then
        'se il file esiste carico i dati dal file di testo
        List1 =File.ReadList(File.DirRootExternal, "RCHangar/ListModel.txt")
  
        Dim Bitmap1 As Bitmap
      
        For i = 0 To 99
          
            ListModel(i) = List1.Get(i)
            'creo un mini array con tutte le parti della riga esaminata
            Dim stringArray() As String = Regex.Split("\|",ListModel(i))
      
            If ListModel(i) <> "0" Then
          
                Dim lvd As ListViewData
                lvd.Initialize
          
                Bitmap1.Initialize(File.DirAssets, "planeApp.png")
          
                lvd.FirstRow = stringArray(0)
                lvd.SecondRow = "Efficiente/In Manutenzione" 'Lo implementerò successivamente con un boolean
                lvd.Picture = Bitmap1
          
                ListModelView.AddTwoLinesAndBitmap2(lvd.FirstRow,lvd.SecondRow,lvd.Picture, lvd)
                ' imposto i colori
                ListModelView.TwoLinesAndBitmap.Label.TextColor = Colors.RGB(0,0,0)
                ListModelView.TwoLinesAndBitmap.SecondLabel.TextColor = Colors.RGB(254,0,0)
          
                ListModelView.TwoLinesAndBitmap.ItemHeight = 80dip
          
          
          
            End If
      
        Next
      
    End If
  
End Sub

Sub ListModelView_ItemClick (Position As Int, Value As Object)
  
    addPlusButton.Visible = False
  
    Dim ListTemp As List
  
    'controllo se esiste il file di testo
    If File.Exists(File.DirRootExternal, "RCHangar/ListModel.txt") Then
        'se il file esiste carico i dati dal file di testo
        ListTemp =File.ReadList(File.DirRootExternal, "RCHangar/ListModel.txt")
      
    End If
  
    Dim stringTemp As String = ListTemp.Get(Position)
  
    Dim stringArray() As String = Regex.Split("\|",stringTemp)
  
    ModelName = stringArray(0)
    Component1 = stringArray(1)
    Component2 = stringArray(2)
    Component3 = stringArray(3)
    Component4 = stringArray(4)
    Component5 = stringArray(5)
    Component6 = stringArray(6)
    Component7 = stringArray(7)
'    Component8 = stringArray(8)
'    Component9 = stringArray(9)
'    Component10 = stringArray(10)

    ModelViewPanel.Visible = True
  
    ModelnameLabel.Text = ModelName
    Component1Label.Text = Component1
    Component2Label.Text = Component2
    Component3Label.Text = Component3
    Component4Label.Text = Component4
    Component5Label.Text = Component5
    Component6Label.Text = Component6
    Component7Label.Text = Component7
'    Component8Label.Text = Component8
'    Component9Label.Text = Component9
'    Component10Label.Text = Component10
End Sub

Sub BackModelWiewButton_Click
    ModelViewPanel.Visible = False
    addPlusButton.Visible = True
End Sub



Sub MaintenanceModelWiewButton_Click
  
End Sub

Sub FlyModelWiewButton_Click
  
End Sub

Sub EditModelWiewButton_Click
  
End Sub

La mia idea era di creare una nuova activity "VediModello" e inserirci dalla sub
B4X:
ListModelView_ItemClick (Position As Int, Value As Object)
in poi. In realtà ci ho provato, creando due variabili temporanee con cui portarmi dietro i valori di
B4X:
(Position As Int, Value As Object)
ma qualcosa non quadra e nella nuova activity su qualsiasi Item clicco mi apre sempre il primo.
Il quesito è: si ritiene necessario, a questo punto, creare una nuova Activity considerando che se rimango nel main, ci saranno almeno altri due pannelli di layout? e se si come devo fare?

PS ricordatevi che avete a che fare con un nubbio... :)
 
Last edited:

Sagenut

Well-Known Member
Licensed User
Immagino che AggiungiModello e VediModello fondamentalmente siano 2 schermate dove in una inserisci i dati di un nuovo modello e nell'altro li mostri come meglio credi (sono perspicace, eh :D).
Più che creare delle nuove Activity io farei apparire dei Panel nella Activity Main dove fare tutto quello che vuoi.
In questo modo tutto è sempre a disposizione senza bisogno di passare dati in vari modi.
 

Luigi S

Member
Licensed User
E si... molto perspicace :D ma ho capito che se dai un nome "storable" agli oggetti è più facile capirci qualcosa....

Ed è coi che sto procedendo, ma non vorrei che per ragioni che io non conosco, sia preferibile creare più activity piuttosto che pannelli nel layout.
 

Sagenut

Well-Known Member
Licensed User
I nomi delle variabili e delle varie view o altro dovrebbero sempre avere un senso logico.
In un Panel puoi caricare anche un Layout, e se il panel lo fai grande a tutto schermo lo puoi quasi considerare come un'altra Activity.
Se la tua App di base presenta una lista con i nomi dei modelli, ha un pulsante per aggiungere nuovi modelli e visualizza i modelli quando ci clicchi sopra.......mi sembra più che sufficiente creare dei pannelli che appaiano all'occorrenza.
E penso sia anche più facile a livello di creazione e gestione.
Poi tra poco potrebbe arrivare un altro utente e dirti l'esatto contrario di quello che ti ho detto io.
Stà a te valutare i consigli e le informazioni che ti vengono dati e scegliere la strada che è più congeniale al tuo metodo di lavoro.
Si può fare la stessa cosa in tanti modi diversi.
L'importante è che il risultato finale sia ciò che volevi.
 
Last edited:

LucaMs

Expert
Licensed User
1) molto spesso è molto meglio creare più Activity, piuttosto che riempire la Main di Panel;
2) nella terza Activity potresti mettere una routine che accettasse come parametri i due che vuoi passare e chiamarla usando CallSubDelayed3
CallSubDelayed3(NomeActivity, "NomeRoutine", Parametro1, Parametro2).

La cosa migliore in assoluto (non relativamente a questa tua app ma sempre) è tentare di lasciare sempre separati dati e grafica.
 

Sagenut

Well-Known Member
Licensed User
Poi tra poco potrebbe arrivare un altro utente e dirti l'esatto contrario di quello che ti ho detto io.
Sono stato profetico. :D
E @LucaMs è un vero Esperto.
Io sono un Niubbo Avanzato. :(
 

udg

Expert
Licensed User
Potresti anche considerare B4XDrawer.
Nel panello a sinistra (quello a scomparsa) potresti mettere il menu (aggiungi, visualizza, esporta..) mentre in quello principale alterni layout diversi in funzione della selezione sul primo.
Oppure crei un unico layout con l'elenco dei modelli attuali (xCLV) e un paio di image/button come comandi per aggiungere/uscire dal programma.
Se si effettua un click sulla lista dei modelli, un nuovo pannello (magari in sovrimpressione) mostra i dettagli della selezione, mentre se si chiede l'aggiunta di un modello il panello in sovrimpressione potrebbe consentire l'immissione di nuovi dati (che al salvataggio aggiungerebbero un elemento alla lista; ps: vale anche per la modifica).
Nota: il pannello in sovrimpressione puoi riconoscerlo da uno specifico panel.tag che imposti o dal fatto che è l'ultimo aggiunto all'activity (il che rende la sua eliminazione semplice nel momento in cui non serve più).
 

Luigi S

Member
Licensed User
Grazie a tutti per le risposte, terrò in considerazione tutte le vostre proposte per il futuro, ma per ora scelgo la strada forse per me più semplice, senza creare altre activity.
Non escludo però la possibilità, appena ci capirò di più, di stravolgere tutto aggiungendo Activity, per quanto riguarda il drawer, se ho capito cos'è, è ancora troppo presto e complicato per me.
 
Top