Autore Topic: Refresh di un solo Tab di una TabActivity!! help!  (Letto 1397 volte)

Offline lupin

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nessuno
  • Sistema operativo:
    Windows 7
Refresh di un solo Tab di una TabActivity!! help!
« il: 24 Ottobre 2010, 19:06:45 CEST »
0
Salve gente,
sto sviluppando un applicazione che è organizzata all'interno di una tabActivity, formata da 4 tab.
Ho la necessità di far aggiornare un solo tab periodicamente, visto che al suo interno contiene dei dati organizzati in una explandableViewList presi in tempo reale dal web.
Vi riporto lo scorcio di codice del MainTab...
Codice (Java): [Seleziona]
public class MainDroid extends TabActivity {
       
       
       
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                setContentView(R.layout.main);  
                Resources res = getResources(); // Resource object to get Drawables  
                TabHost tabHost = getTabHost();  // The activity TabHost  
                TabHost.TabSpec spec;  // Resusable TabSpec for each tab  
                Intent intent;  // Reusable Intent for each tab    
                // Create an Intent to launch an Activity for the tab (to be reused)  
       
               
                intent = new Intent().setClass(this, AzioniAct.class);    // Initialize a TabSpec for each tab and add it to the TabHost
                spec = tabHost.newTabSpec("azioni").setIndicator("tab1",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);  
                tabHost.addTab(spec);    // Do the same for the other tabs  
               
                intent = new Intent().setClass(this, QuotazioniAct.class);    
                spec = tabHost.newTabSpec("tab2").setIndicator("Quotazioni",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);  
                tabHost.addTab(spec);    
               
                intent = new Intent().setClass(this, MonitorAct.class);    
                spec = tabHost.newTabSpec("tab3").setIndicator("Monitor",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);    
                tabHost.addTab(spec);  
               
                intent = new Intent().setClass(this, SettingsAct.class);    
                spec = tabHost.newTabSpec("tab4").setIndicator("Settings",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);    
                tabHost.addTab(spec);  
               
                tabHost.setCurrentTab(0);
               
               
                }

Potete darmi una mano?  Grazie saluti!!

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #1 il: 24 Ottobre 2010, 21:11:57 CEST »
0
Devi aggiornare tramite setContent?
Non basta chiamare setContent periodicamente solo per la tab che ti interessa?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline lupin

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nessuno
  • Sistema operativo:
    Windows 7
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #2 il: 24 Ottobre 2010, 22:04:12 CEST »
0
No nn basta... chiamando solo setContent lancia errore e chiude l'applicazione! :-\

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #3 il: 24 Ottobre 2010, 22:20:09 CEST »
0
Posta il logcat
Postate il LogCat LogCat LogCat LogCat LogCat

Offline lupin

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nessuno
  • Sistema operativo:
    Windows 7
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #4 il: 24 Ottobre 2010, 23:05:15 CEST »
0
dove lo trovo? Dentro quest'activity che devo aggiornare ci stà un expandableListView con un SimpleExpandableAdapter.... mi basterebbe aggiornare solo i dati presenti la dentro... ecco il codice!
Codice (Java): [Seleziona]
@Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                pa=pa.getInstance();

                try {
                        list=(LinkedList<Azione>) pa.getAllAzioni();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                setContentView(R.layout.expand);


                // Creiamo il SimpleExpandableAdapter
                expAdapter =
                        new SimpleExpandableListAdapter(this, createGroupMap(), R.layout.expanded_layout,
                                        R.layout.collapsed_layout, GROUP_KEYS, GROUP_VIEW_IDS, createDataMap(),
                                        R.layout.child_layout, R.layout.last_child_layout, CHILD_KEYS,
                                        CHILD_VIEW_IDS);
                // Otteniamo il riferimento alla ExpandableListView
                expListView= (ExpandableListView)findViewById(R.id.expandableListView);
                // Assegnamo l'adapter
                expListView.setAdapter(expAdapter);
               







        }

        public void refresh() {  
                setContentView(R.layout.expand);
               
        }  


        public List<? extends Map<String, String>> createGroupMap() {
                List<Map<String, String>> groupMap = new ArrayList<Map<String, String>>();
                for(int i = 0;i<list.size();i++){
                        Map<String,String> groupData = new HashMap<String,String>();
                        groupData.put(TITOLO_KEY, list.get(i).getName());
                        groupMap.add(groupData);
                }
                return groupMap;

        }

        public List<? extends List<? extends Map<String, String>>> createDataMap() {
                List<List<Map<String, String>>> dataMap = new ArrayList<List<Map<String, String>>>();
                for(int i = 0;i<list.size();i++){
                        List<Map<String, String>> itemMap = new ArrayList<Map<String, String>>();
                        Map<String,String> groupData = new HashMap<String,String>();
                        groupData.put(ULTPRICE_KEY, list.get(i).getUltPriceStr());
                        groupData.put(VAR_KEY, list.get(i).getVarStr());
                        groupData.put(DENARO_KEY, list.get(i).getDenaroStr());
                        groupData.put(ORA_KEY, list.get(i).getOraStr());
                        groupData.put(LETTERA_KEY, list.get(i).getLetteraStr());
                        groupData.put(MAX_KEY, list.get(i).getMaxStr());
                        groupData.put(MIN_KEY, list.get(i).getMinStr());
                        groupData.put(AVINDEX_KEY, list.get(i).getAvindexStr());
                        groupData.put(MONETA_KEY, list.get(i).getMonetaStr());
                        itemMap.add(groupData);

                        dataMap.add(itemMap);                  
                }
                return dataMap;
        }      

        private class Ciclo extends Thread{
                @Override
                public void run() {
                        while (true){
                                try {
                                        Thread.sleep(15000);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                refresh();
                        }

                }
        }

}

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #5 il: 25 Ottobre 2010, 10:57:08 CEST »
0
Il logcat lo trovi nella prospettiva ddms di eclipse
Postate il LogCat LogCat LogCat LogCat LogCat

Offline lupin

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nessuno
  • Sistema operativo:
    Windows 7
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #6 il: 25 Ottobre 2010, 11:43:57 CEST »
0
Codice: [Seleziona]
10-25 09:41:46.904: DEBUG/AndroidRuntime(409): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
10-25 09:41:46.914: DEBUG/AndroidRuntime(409): CheckJNI is ON
10-25 09:41:47.164: DEBUG/AndroidRuntime(409): --- registering native functions ---
10-25 09:41:48.104: DEBUG/AndroidRuntime(409): Shutting down VM
10-25 09:41:48.114: DEBUG/dalvikvm(409): Debugger has detached; object registry had 1 entries
10-25 09:41:48.154: INFO/AndroidRuntime(409): NOTE: attach of thread 'Binder Thread #3' failed
10-25 09:41:48.755: DEBUG/AndroidRuntime(417): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
10-25 09:41:48.764: DEBUG/AndroidRuntime(417): CheckJNI is ON
10-25 09:41:48.994: DEBUG/AndroidRuntime(417): --- registering native functions ---
10-25 09:41:50.084: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.wsd/.WallStreetDroid }
10-25 09:41:50.164: DEBUG/AndroidRuntime(417): Shutting down VM
10-25 09:41:50.174: DEBUG/dalvikvm(417): Debugger has detached; object registry had 1 entries
10-25 09:41:51.204: INFO/global(399): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
10-25 09:41:51.654: DEBUG/dalvikvm(399): GC_FOR_MALLOC freed 5502 objects / 379464 bytes in 85ms
10-25 09:41:52.024: INFO/Process(399): Sending signal. PID: 399 SIG: 9
10-25 09:41:52.084: INFO/ActivityManager(59): Process com.wsd (pid 399) has died.
10-25 09:41:52.134: INFO/UsageStats(59): Unexpected resume of com.android.launcher while already resumed in com.wsd
10-25 09:41:52.244: WARN/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43f4f170
10-25 09:42:17.034: DEBUG/AndroidRuntime(427): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
10-25 09:42:17.034: DEBUG/AndroidRuntime(427): CheckJNI is ON
10-25 09:42:17.284: DEBUG/AndroidRuntime(427): --- registering native functions ---
10-25 09:42:18.404: DEBUG/AndroidRuntime(427): Shutting down VM
10-25 09:42:18.414: DEBUG/dalvikvm(427): Debugger has detached; object registry had 1 entries
10-25 09:42:18.444: INFO/AndroidRuntime(427): NOTE: attach of thread 'Binder Thread #3' failed
10-25 09:42:19.054: DEBUG/AndroidRuntime(435): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
10-25 09:42:19.064: DEBUG/AndroidRuntime(435): CheckJNI is ON
10-25 09:42:19.294: DEBUG/AndroidRuntime(435): --- registering native functions ---
10-25 09:42:20.314: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.wsd/.WallStreetDroid }
10-25 09:42:20.364: DEBUG/AndroidRuntime(435): Shutting down VM
10-25 09:42:20.374: DEBUG/dalvikvm(435): Debugger has detached; object registry had 1 entries
10-25 09:42:20.424: INFO/ActivityManager(59): Start proc com.wsd for activity com.wsd/.WallStreetDroid: pid=442 uid=10032 gids={3003}
10-25 09:42:20.444: INFO/AndroidRuntime(435): NOTE: attach of thread 'Binder Thread #3' failed
10-25 09:42:20.904: DEBUG/SntpClient(59): request time failed: java.net.SocketException: Address family not supported by protocol
10-25 09:42:26.874: INFO/global(442): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
10-25 09:42:27.874: DEBUG/dalvikvm(442): GC_FOR_MALLOC freed 7688 objects / 424672 bytes in 144ms
10-25 09:42:29.094: DEBUG/dalvikvm(442): GC_FOR_MALLOC freed 10199 objects / 526240 bytes in 98ms
10-25 09:42:29.595: INFO/ActivityManager(59): Displayed activity com.wsd/.WallStreetDroid: 9244 ms (total 39309 ms)
10-25 09:42:34.724: DEBUG/dalvikvm(125): GC_EXPLICIT freed 936 objects / 50264 bytes in 88ms
10-25 09:42:36.564: WARN/dalvikvm(442): threadid=8: thread exiting with uncaught exception (group=0x4001d800)
10-25 09:42:36.574: ERROR/AndroidRuntime(442): FATAL EXCEPTION: Thread-9
10-25 09:42:36.574: ERROR/AndroidRuntime(442): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.View.invalidate(View.java:5139)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.View.onFocusChanged(View.java:2664)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.widget.AbsListView.onFocusChanged(AbsListView.java:984)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.widget.ListView.onFocusChanged(ListView.java:3151)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.View.clearFocusForRemoval(View.java:2577)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:2289)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.view.ViewGroup.removeAllViews(ViewGroup.java:2254)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:196)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at android.app.Activity.setContentView(Activity.java:1647)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at com.wsd.AzioniAct.refresh(AzioniAct.java:102)
10-25 09:42:36.574: ERROR/AndroidRuntime(442):     at com.wsd.AzioniAct$Ciclo.run(AzioniAct.java:147)
10-25 09:42:36.604: WARN/ActivityManager(59):   Force finishing activity com.wsd/.WallStreetDroid

a me basterebbe anche solo rafe il refresh della lista!! Grazie!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #7 il: 25 Ottobre 2010, 12:28:43 CEST »
+1
A quanto pare fai una chiama cross-thread non permessa nel metodo refresh() della classe AzioniAct.
Per evitare questa spiacevole situazione ti consiglio di usare il metodo runOnUiThread

Offline lupin

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nessuno
  • Sistema operativo:
    Windows 7
Re:Refresh di un solo Tab di una TabActivity!! help!
« Risposta #8 il: 25 Ottobre 2010, 12:50:34 CEST »
0
Tutt'ok!!!! ho risolto con un handler :) Satisfaction!!! :) Grazie a tutti voi!