Autore Topic: Tabhost / Tabcontent contenente ExpandableListView e Bottone  (Letto 1022 volte)

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Tabhost / Tabcontent contenente ExpandableListView e Bottone
« il: 11 Maggio 2012, 17:47:10 CEST »
0
Ciao a tutti,
scusate ma non riesco proprio a capire quello che mi sta capitando con dei layout ...

Sto tentando di implementare tramite TabHost una interfaccia contenente 4 Tab ciascuno con layout ed activity separate e target 1.6.

Questo è l'xml per il TabHost contenitore:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@android:id/tabhost"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
    <LinearLayout
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:padding="5dp">
        <TabWidget
           android:id="@android:id/tabs"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content" />
        <FrameLayout
           android:id="@android:id/tabcontent"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:padding="5dp" />
    </LinearLayout>
</TabHost>

Questo l'xml del TAB 1:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_marginBottom="5dp">
   
    <ExpandableListView
       android:id="@+id/explist"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:groupIndicator="@drawable/group_icon"
       android:layout_alignParentTop="true">
    </ExpandableListView>

    <Button
       android:id="@+id/button"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="@string/button"
       android:layout_alignParentBottom="true"/>

</RelativeLayout>

Questo l'xml del TAB 2:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_gravity="top">

    - - - - 6 BOTTONI + 6 TEXTVIEW - - - -
       
</RelativeLayout>

In Eclipse l'anteprima grafica del layout sembra impeccabile nell'emulatore però:
nel TAB 1 il tabcontent appare vuoto nonostante la chiamata a setContentView(R.layout.tab1);
nel TAB 2 il tabcontent viene visualizzato ma spostato verso il basso e non allineato Top

L'aspetto che vorrei dare al TAB1 è come quello in allegato con l'area blu che contiene la ExpandableListView e quella azzurra il Bottone.

Aggiungo una curiosità ... quello che vi sto raccontando si verifica solo da quando ho aggiunto un'activity (con un suo layout ti tipo Relative) prima di visualizzare graficamente il layout del TabHost.

Cercansi anime pie per una dritta eheheh
« Ultima modifica: 11 Maggio 2012, 17:50:23 CEST da Eu4ia »
Se ti sono stato utile premi "Thanks" ;-)

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Tabhost / Tabcontent contenente ExpandableListView e Bottone
« Risposta #1 il: 14 Maggio 2012, 11:18:43 CEST »
0
up  :-)
Se ti sono stato utile premi "Thanks" ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
R: Tabhost / Tabcontent contenente ExpandableListView e Bottone
« Risposta #2 il: 14 Maggio 2012, 11:34:58 CEST »
0
Dovresti postare anche il codice java della/delle activity ;-)

Inviato dal mio Galaxy Nexus con Tapatalk 2

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Tabhost / Tabcontent contenente ExpandableListView e Bottone
« Risposta #3 il: 14 Maggio 2012, 13:00:42 CEST »
0
Ooook  :D

Ho estrapolato solo le parti inerenti il problema di visualizzazione.

Prima di aggiungere l'activity Main col relativo layout tutto veniva visualizzato bene ma ora ,anche se faccio partire TabWidget da Manifest, non si vede correttamente.
 ???



"Main" activity:

Codice (Java): [Seleziona]
public class Main extends Activity implements OnClickListener {

...

public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

...

            button0.setOnClickListener(this);
}

public void onResume() {
            super.onResume();
            setContentView(R.layout.main);
...
            button0.setOnClickListener(this);
}

@Override
        public void onClick(View arg0) {
                switch(arg0.getId()){
                case R.id.BUTTON0:
                        Intent TabIntent = new Intent(Main.this, TabWidget.class);
                        startActivity(TabIntent);
                        finish();
                        }
                         break;

                ...

                }
         }
}

"Main" XML:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_gravity="top">

- - - - 6 BOTTONI + 6 TEXTVIEW - - - -
       
</RelativeLayout>




TabWidget Activity:

Codice (Java): [Seleziona]
public class TabWidget extends TabActivity {
   
        Resources res;
        TabHost tabHost;
        TabHost.TabSpec spec;
        Intent intent;
   
   
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.maintab);

            res = getResources();
            tabHost = getTabHost();
           
               
            intent = new Intent().setClass(TabWidget.this, TAB1.class);
            spec = tabHost.newTabSpec(getString(R.string.tab1)).setIndicator(getString(R.string.tab1),
                                          res.getDrawable(R.drawable.ic_tab_1))
                          .setContent(intent);
            tabHost.addTab(spec);

            - - - - - Aggiungo gli altri 3 TAB - - - - - -

            tabHost.setCurrentTabByTag(getString(R.string.tab1));          
        }


    public void onResume() {
            super.onResume();

            setContentView(R.layout.maintab);
            res = getResources();
            tabHost = getTabHost();
           
               
            intent = new Intent().setClass(TabWidget.this, TAB1.class);
            spec = tabHost.newTabSpec(getString(R.string.tab1)).setIndicator(getString(R.string.tab1),
                                          res.getDrawable(R.drawable.ic_tab_1))
                          .setContent(intent);
            tabHost.addTab(spec);

            - - - - - Aggiungo gli altri 3 TAB - - - - - -

            tabHost.setCurrentTabByTag(getString(R.string.tab1));          
}

MainTab XML:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@android:id/tabhost"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
    <LinearLayout
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:padding="5dp">
        <TabWidget
           android:id="@android:id/tabs"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content" />
        <FrameLayout
           android:id="@android:id/tabcontent"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:padding="5dp" />
    </LinearLayout>
</TabHost>



TAB1 Activity:

Codice (Java): [Seleziona]
public class TAB1 extends Activity implements OnClickListener {
       
...    
       
        @SuppressWarnings("unchecked")
        @Override
        public void onCreate(Bundle savedInstanceState) {
       
        try{
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.TAB1);
                 
             
                 expListAdapter =
                new SimpleExpandableListAdapter(
                                this,
                                createGroup(db),
                                R.layout.group_row,
                                new String[] { "Group Name", "Group Desc" },
                                new int[] { R.id.grp_name, R.id.grp_desc },
                                createChild(db),
                                R.layout.child_row,
                                new String[] {"Sub Item"},
                                new int[] { R.id.grp_child}
                        );
           
             KeyList = (ExpandableListView) findViewById(R.id.explist);
             KeyList.setAdapter(expListAdapter);

...
}


   public void  onContentChanged  () {
            super.onContentChanged();        
   }

TAB1 XML:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_marginBottom="5dp">
   
    <ExpandableListView
      android:id="@+id/explist"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:groupIndicator="@drawable/group_icon"
      android:layout_alignParentTop="true">
    </ExpandableListView>

    <Button
      android:id="@+id/button"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/button"
      android:layout_alignParentBottom="true"/>

</RelativeLayout>
« Ultima modifica: 14 Maggio 2012, 13:07:53 CEST da Eu4ia »
Se ti sono stato utile premi "Thanks" ;-)

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Tabhost / Tabcontent contenente ExpandableListView e Bottone
« Risposta #4 il: 15 Maggio 2012, 09:00:59 CEST »
0
up
Se ti sono stato utile premi "Thanks" ;-)

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Tabhost / Tabcontent contenente ExpandableListView e Bottone
« Risposta #5 il: 17 Maggio 2012, 00:49:53 CEST »
0
Ok sto tentando da solo e credevo di aver risolto spostandomi su target 2.3.3 ed avviando dalla TabWidgwet Activity, anzichè l'activity TAB1, un'activity che estende ActivityGroup così:

Codice (Java): [Seleziona]
public class TAB1Group extends ActivityGroup{
    /** Called when the activity is first created. */
    @Override
    public void onResume()
    {
        super.onResume();
       
        Intent intent = new Intent(getParent(),TAB1.class);
       
        Window window = getLocalActivityManager().startActivity("TAB1",intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
                if (window != null)
                {                      
                        setContentView(window.getDecorView());
                }
        }

Posto anche il link da cui ho attinto info:
http://devteam.vivido.it/2011/03/android-navigazione-tabactivity/
(il post è un pò datato quindi forse c'è qualcosa di deprecato)

Dopo aver apportato questa modifica ... BAM ... il layout TAB1 (sotto i tabs che sono sempre visibili) si vede e pure bene.
Aggiungo dell'altro e ... NOOOOO ... sparisce nuovamente!

Non ci capisco più una m@#+!a
 o_O
« Ultima modifica: 17 Maggio 2012, 09:08:42 CEST da Eu4ia »
Se ti sono stato utile premi "Thanks" ;-)

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Tabhost / Tabcontent contenente ExpandableListView e Bottone
« Risposta #6 il: 18 Maggio 2012, 16:07:24 CEST »
0
Errore capito ... è nella mia tabwidget activity:
Sperando di fare cosa buona e giusta, ma sbagliandomi clamorosamente, avevo inserito sia in onCreate che in onResume lo stesso codice per la composizione dei tab.

L'errore sta proprio nell'aver messo lo stesso codice sia in un metodo che nell'altro; lasciandolo solo in onResume tutto fila liscio.
Probabilmente avendo lo stesso costrutto dei tab in entrambi i metodi mandava in confusione la classe dedicata alla rappresentazione grafica dei layout xml su schermo.
E' solo una supposizione, ma tant'è che ora funziona e non ho trovato molto nel LogCat per spiegarmelo diversamente.

Un suggerimento a chi ne avesse bisogno... aggiungere una segnalazione Log per ogni metodo di cui si fa l'override aiuta a comprendere il ciclo vitale delle activity, faccio un esempio su onCreate ho aggiunto dopo la chiamata super.OnCreate questa riga:

Codice (Java): [Seleziona]
Log.i("[nome_progetto]", getClass().getSimpleName() + " onCreate");Naturalmente  bisogna sostituire [nome_progetto] col proprio nome progetto/app.

Questo fa scrivere sul logcat (a livello i = informativo) che stato ha assunto l'activity in quel momento, così che inserendo un filtro su logcat per applicazione e livello "informativo" si evita di dover confondersi tra le centinaia di righe non utili al debug del proprio progetto.

 ;-)
Se ti sono stato utile premi "Thanks" ;-)