2012-02-26 20 views
11

probé esto http://developer.android.com/guide/tutorials/views/hello-tabwidget.html pero usa tabactivity obsoleto, y eclipse sugirió que use fragmentactividad en su lugar, y me da una muestra (en la información sobre herramientas), pero creo que la muestra que me dio es realmente enorme .. Sólo quiero una lengüeta simple como la URL anterior juego .. cualquier muestra de cómo usar fragmentactivity a achive las mismas fichas exactas como el URL (al hacer clic en el botón en las pestañas no cambiar de actividad, sino simplemente cambiar el contenido que se muestra)?pestaña simple usando fragmentactividad en lugar de tabactivity

solo como referencia, esta es la muestra que me sugirió el eclipse (a través de la información sobre herramientas ampliada): enorme, ¿no?

@Deprecated Esta clase está obsoleta. Las nuevas aplicaciones deberían usar Fragmentos en lugar de esta clase; para continuar a funcionar en dispositivos más antiguos, que puede utilizar la biblioteca de soporte v4 que proporciona una versión de la API Fragmento que es compatible hacia abajo para donut.

Para aplicaciones en desarrollo contra HONEYCOMB o posterior, las lengüetas son típicamente presentan en la interfaz de usuario utilizando el nuevo ActionBar.newTab() y API relacionadas para la colocación de las pestañas dentro de su área barra de acción.

Un reemplazo para TabActivity también puede ser implementado por directamente usando TabHost. Tendrá que definir un diseño que utiliza correctamente un TabHost con un TabWidget, así como un área en la que mostrar su contenido pestaña.

Un ejemplo típico sería:

<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="0"/> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:layout_weight="0"/> 

     <FrameLayout 
      android:id="@+android:id/realtabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1"/> 

    </LinearLayout> 
</TabHost> 

La aplicación tiene que asumir la responsabilidad para conmutar el contenido que se muestra cuando el usuario cambia entre pestañas.

import java.util.HashMap; 
import com.example.android.supportv4.R; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.view.View; 
import android.widget.TabHost; 

/** 
* This demonstrates how you can implement switching between the tabs of a 
* TabHost through fragments. It uses a trick (see the code below) to allow 
* the tabs to switch between fragments instead of simple views. 
*/ 
public class FragmentTabs extends FragmentActivity { 
    TabHost mTabHost; 
    TabManager mTabManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragment_tabs); 
     mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
     mTabHost.setup(); 

     mTabManager = new TabManager(this, mTabHost, R.id.realtabcontent); 

     mTabManager.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), 
       FragmentStackSupport.CountingFragment.class, null); 
     mTabManager.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), 
       LoaderCursorSupport.CursorLoaderListFragment.class, null); 
     mTabManager.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), 
       LoaderCustomSupport.AppListFragment.class, null); 
     mTabManager.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"), 
       LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); 

     if (savedInstanceState != null) { 
      mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
     } 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putString("tab", mTabHost.getCurrentTabTag()); 
    } 

    /** 
    * This is a helper class that implements a generic mechanism for 
    * associating fragments with the tabs in a tab host. It relies on a 
    * trick. Normally a tab host has a simple API for supplying a View or 
    * Intent that each tab will show. This is not sufficient for switching 
    * between fragments. So instead we make the content part of the tab host 
    * 0dp high (it is not shown) and the TabManager supplies its own dummy 
    * view to show as the tab content. It listens to changes in tabs, and takes 
    * care of switch to the correct fragment shown in a separate content area 
    * whenever the selected tab changes. 
    */ 
    public static class TabManager implements TabHost.OnTabChangeListener { 
     private final FragmentActivity mActivity; 
     private final TabHost mTabHost; 
     private final int mContainerId; 
     private final HashMap<String, TabInfo> mTabs = new HashMap<String, TabInfo>(); 
     TabInfo mLastTab; 

     static final class TabInfo { 
      private final String tag; 
      private final Class<?> clss; 
      private final Bundle args; 
      private Fragment fragment; 

      TabInfo(String _tag, Class<?> _class, Bundle _args) { 
       tag = _tag; 
       clss = _class; 
       args = _args; 
      } 
     } 

     static class DummyTabFactory implements TabHost.TabContentFactory { 
      private final Context mContext; 

      public DummyTabFactory(Context context) { 
       mContext = context; 
      } 

      @Override 
      public View createTabContent(String tag) { 
       View v = new View(mContext); 
       v.setMinimumWidth(0); 
       v.setMinimumHeight(0); 
       return v; 
      } 
     } 

     public TabManager(FragmentActivity activity, TabHost tabHost, int containerId) { 
      mActivity = activity; 
      mTabHost = tabHost; 
      mContainerId = containerId; 
      mTabHost.setOnTabChangedListener(this); 
     } 

     public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) { 
      tabSpec.setContent(new DummyTabFactory(mActivity)); 
      String tag = tabSpec.getTag(); 

      TabInfo info = new TabInfo(tag, clss, args); 

      // Check to see if we already have a fragment for this tab, probably 
      // from a previously saved state. If so, deactivate it, because our 
      // initial state is that a tab isn't shown. 
      info.fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag); 
      if (info.fragment != null && !info.fragment.isDetached()) { 
       FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 
       ft.detach(info.fragment); 
       ft.commit(); 
      } 

      mTabs.put(tag, info); 
      mTabHost.addTab(tabSpec); 
     } 

     @Override 
     public void onTabChanged(String tabId) { 
      TabInfo newTab = mTabs.get(tabId); 
      if (mLastTab != newTab) { 
       FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 
       if (mLastTab != null) { 
        if (mLastTab.fragment != null) { 
         ft.detach(mLastTab.fragment); 
        } 
       } 
       if (newTab != null) { 
        if (newTab.fragment == null) { 
         newTab.fragment = Fragment.instantiate(mActivity, 
           newTab.clss.getName(), newTab.args); 
         ft.add(mContainerId, newTab.fragment, newTab.tag); 
        } else { 
         ft.attach(newTab.fragment); 
        } 
       } 

       mLastTab = newTab; 
       ft.commit(); 
       mActivity.getSupportFragmentManager().executePendingTransactions(); 
      } 
     } 
    } 
} 
+1

esto es lo que creo que necesito .. https://gist.github.com/1126843 pero ¿cómo se ajusta el contenido de las pestañas? – imin

+0

relacionados: http://stackoverflow.com/questions/7599816/tabactivity-is-deprecated – Casebash

Respuesta

Cuestiones relacionadas