Autore Topic: TabLayout  (Letto 466 volte)

Offline zerocool87

  • Utente junior
  • **
  • Post: 131
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Htc Legend
  • Sistema operativo:
    Ubuntu 10.04
TabLayout
« il: 01 Settembre 2010, 23:01:26 CEST »
0
Ciao a tutti. ho un problema con un tablayout e con la rotazione dello schermo.
Mi spiego meglio. Nel mio tablayout ad ogni tab corrisponde un intent per fare partire un'activity differente.
Prima di implementare il tablayout avevo impostato il metodo onconfigurationChanged in ogni activity e tutto funzionava correttamente.
Adesso, però, durante la rotazione dello schermo è solo l'activity esterna che ne risente in quanto quella interna viene ricreata (le activity all'interno del tab non si accorgono che lo schermo sia ruotato)
Io ho "risolto" con un piccolo trucco, in pratica nel metodo oncreate dell'activity(quella dentro il tab) ho impostato

Codice (Java): [Seleziona]
                if(myApp.getActivity2()==false){//controllo se è la prima volta che parte l'activity
                myApp.setActivity2(true);
                        try{
                                Log.e("Activity2 ","Oncreate");

                                username=myApp.getUsername();
                                host_tre=myApp.getHostTre();
                                sid=myApp.getSid();
                                seq=myApp.getSeq();
                                base_url=myApp.getBaseUrl();

                        }catch(Exception e){Log.e("Recupero dati",e.toString());}
                        Log.e("Activity2","Dopo avere recuperato l'intent");



                        try{
                                //sc.handshake();
                                //      BackgroundWorker bw=new BackgroundWorker();

                                new BackgroundWorker().execute();
                        }catch(Exception e){Log.e("MOTIVO", e.toString());}



                }

        else //se l'activity era già stata avviata reimposto il layout senza ricreare tutto
                        setUpViews();


Il problema che mi si pone è che durante la rotazione il BackgroundWorker (mi serve a scambiare dati con un server http) muore.

C'è qualche modo di fare avvertire all'activity dentro il tab che è ruotato lo schermo?
Posto il codice dell'activity con tablayout e l'xml

Codice (Java): [Seleziona]
public class Tabs3 extends Activity {
        LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);
        private static final String STATES_KEY = "android:states";
        private Contact personal=new Contact("","",0,true); //Me stesso
        private String username=null;
        MyApplication myApp=MyApplication.getInstance();
        Bundle states;
       

       
        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Tabs3 ","Oncreate");
        try{setContentView(R.layout.tab);
        }catch(Exception e){Log.e("Errore set content", e.toString());}
        try{
            Bundle states = savedInstanceState != null
            ? (Bundle) savedInstanceState.getBundle(STATES_KEY) : null;
            mLocalActivityManager.dispatchCreate(states);
            myApp.setBundle(states);
            //Log.e("Tabs 3 onCreate States=",states.toString());
        }catch(Exception e){Log.e("Errore on Create Tabs3",e.toString());}
        Log.e("Tabs3","Ho recuperato l'intent");


        try{
            username=myApp.getUsername();
            personal.setNickname(username);
            //personal.setName(sid);
            //et.append("Username ricavato="+username+"\n");
            personal.setStatus("ONLINE");
            TextView myname=(TextView)findViewById(R.id.MyName);
            ImageView myim=(ImageView)findViewById(R.id.MyStatus);
            myim.setBackgroundResource(personal.getImage());
            myname.setText(username);
            myname.setVisibility(0);
        }catch(Exception e){Log.e("Errore: ",e.toString());}
        //mLocalActivityManager.startActivity("asdas",new Intent(this, activity2.class) );
        TabHost tabHost;
        try{  

            // Otteniamo il riferimento al TabHost
            tabHost = (TabHost) findViewById(R.id.myTabHost);
            tabHost.setup(mLocalActivityManager);              
            // Aggiungiamo il Tab associato alla prima view
            // tabHost.addTab(tabHost.newTabSpec("tabview1").setContent(new Intent(this, activity2.class)).setIndicator("sada"));
            tabHost.addTab(tabHost.newTabSpec("tab1")

                    .setIndicator("Contatti")
                    .setContent(new Intent(Tabs3.this, activity2.class)));

            tabHost.addTab(tabHost.newTabSpec("Phone").setContent(R.id.tabview2).setIndicator("Phone"));

            tabHost.addTab(tabHost.newTabSpec("Preferences").setContent(R.id.tabview3).setIndicator("Preferences"));


        }catch(Exception e){Log.e("Motivo Errore Tabs3", e.toString());}

    }


Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
    <RelativeLayout android:id="@+id/RelativeLayout01"
                        android:layout_width="fill_parent" android:layout_height="30dip">
        <ImageView android:id="@+id/MyStatus" android:layout_width="10dip"
                android:layout_height="15dip"></ImageView>
        <TextView android:layout_marginLeft="10dip"
                android:layout_toRightOf="@+id/MyStatus" android:textAppearance="?android:attr/textAppearanceMedium"
                android:id="@+id/MyName" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:visibility="visible"></TextView>
        </RelativeLayout>
    <TabHost
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/myTabHost"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">
        <LinearLayout
               android:id="@+id/myLayout"
               android:orientation="vertical"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent">
                <TabWidget
                       android:id="@android:id/tabs"
                       android:layout_width="fill_parent"
                       android:layout_height="wrap_content"></TabWidget>
                <FrameLayout
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:id="@android:id/tabcontent">
                        <LinearLayout
                               android:orientation="vertical"
                               android:layout_width="fill_parent"
                               android:layout_height="fill_parent"
                               android:id="@+id/tabview1">
                               
                        </LinearLayout>
                        <LinearLayout
                               android:orientation="horizontal"
                               android:layout_width="fill_parent"
                               android:layout_height="fill_parent"
                               android:id="@+id/tabview2">
                               
                        </LinearLayout>
                        <LinearLayout
                               android:orientation="horizontal"
                               android:layout_width="fill_parent"
                               android:layout_height="fill_parent"
                               android:id="@+id/tabview3">
                               
                        </LinearLayout>
                </FrameLayout>
        </LinearLayout>
</TabHost>
   
</LinearLayout>

Grazie

Offline zerocool87

  • Utente junior
  • **
  • Post: 131
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Htc Legend
  • Sistema operativo:
    Ubuntu 10.04
Re:TabLayout
« Risposta #1 il: 01 Settembre 2010, 23:13:24 CEST »
0
mi spiego un pò meglio. io vorrei fare una cosa simile a quanto avviene con tapatalk.se carico un forum e ruoto il telefono non si riavvia tutto, ma continua a funzionare .come posso fare la stessa cosa?


Edit. un'altra domanda.posso impostare che una delle activity dentro il tab si visualizzi solo in modalità portrait?
Io ci ho provato, ma non mi funziona.
« Ultima modifica: 01 Settembre 2010, 23:32:56 CEST da zerocool87 »