2013-06-27 4 views
3

Я использую фрагменты и tabHost, и все работает очень хорошо. Что мне нужно сделать, это: Когда я нажимаю кнопку, он должен взять меня к другому фрагменту, и мне нужно, чтобы изменить индикатор вкладки:Измените индикатор вкладки при нажатии кнопки (Фрагменты и tabHost)

enter image description here

При нажатии кнопки фрагмент изменяется, но индикатор вкладки не работает.

Прямо сейчас индикатор меняется только при нажатии Tab, но я хочу получить тот же эффект, когда я нажимаю кнопку. Это возможно?.

КОД:

public class AplicacionActivity extends FragmentActivity { 
    final public static String tagFragmentClientes = "fragmentClientes"; 
final public static String tagFragmentSettings = "fragmentSettings"; 
final public static String tagFragmentLogout = "fragmentLogout"; 

    /*Principal fragments of the tabs*/ 
ClientesActivity fragmentClientes; 
SettingsActivity fragmentSettings; 
LogoutActivity fragmentLogout; 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_aplicacion); 

    fragmentClientes = new ClientesActivity(); 
    fragmentSettings = new SettingsActivity(); 
    fragmentLogout = new LogoutActivity(); 

    mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
    mTabHost.setOnTabChangedListener(listener); 

    mTabHost.setup(); 

    initializeTab(); 
} 

public void initializeTab() { 

    Resources res = getResources(); 

    TabHost.TabSpec spec = mTabHost.newTabSpec(tagFragmentClientes); 

    spec.setContent(new TabHost.TabContentFactory() { 
     public View createTabContent(String tag) { 
      return findViewById(android.R.id.tabcontent); 
     } 
    }); 
    spec.setIndicator(" Clientes ", res.getDrawable(R.drawable.clientes)); 
    mTabHost.addTab(spec); 


    spec = mTabHost.newTabSpec(tagFragmentSettings); 
    spec.setContent(new TabHost.TabContentFactory() { 
     public View createTabContent(String tag) { 
      return findViewById(android.R.id.tabcontent); 
     } 
    }); 
    spec.setIndicator(" Settings ",res.getDrawable(R.drawable.settings)); 
    mTabHost.addTab(spec); 

    spec = mTabHost.newTabSpec(tagFragmentLogout); 
    spec.setContent(new TabHost.TabContentFactory() { 
     public View createTabContent(String tag) { 
      return findViewById(android.R.id.tabcontent); 
     } 
    }); 
    spec.setIndicator(" Logout ",res.getDrawable(R.drawable.logouticon)); 
    mTabHost.addTab(spec); 
} 

TabHost.OnTabChangeListener listener = new TabHost.OnTabChangeListener() { 
    public void onTabChanged(String tabId) { 

     /*Set current tab..*/ 
     if(tabId.equals(tagFragmentClientes)){ 

      pushFragments(tagFragmentClientes, fragmentClientes, false); 

     }else if(tabId.equals(tagFragmentSettings)){ 

      pushFragments(tagFragmentSettings, fragmentSettings, false); 

     }else if(tabId.equals(tagFragmentLogout)){ 

      mostrarAvisoCierreApp(); 
      //nos saque el aviso de nuevo si lo volvemos a presionar. 
      mTabHost.getCurrentTabView().setOnTouchListener(new OnTouchListener(){ 
       @Override 
       public boolean onTouch(View v, MotionEvent event){ 

        if (event.getAction() == MotionEvent.ACTION_DOWN){ 
         if (mTabHost.getCurrentTabTag().equals(tagFragmentLogout)){ 
          mostrarAvisoCierreApp(); 
         } 
        } 
        return false; 
       } 
      }); 

     } 
    } 
}; 

public void pushFragments(String tag, Fragment fragment, boolean backStack){ 

    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 

    ft.replace(android.R.id.tabcontent, fragment, tag); 

    if(backStack){ 
     ft.addToBackStack(null); 
    } 

    ft.commit(); 
} 
} 
+0

r u используя пользовательские вкладки или используя любую библиотеку? – TheFlash

+0

Я не использую какую-либо библиотеку просто android.widget.TabHost; Я собираюсь поставить код, если это поможет. Дай мне секунду. – kiduxa

+0

просто отправьте соответствующий код, вам будет легко помочь u. – TheFlash

ответ

4

Вызов tabHost.setCurrentTab(n)

Где tabHost это виджет и n позиция вкладки для выбора.

+0

спасибо, что это сработало. – kiduxa

+0

Есть ли другой способ ?. Я имею в виду, если я сделаю это, фрагмент содержимого загрузится, и я хотел бы просто изменить индикатор вкладки. Это возможно? – kiduxa

+0

ok с mTabsWidget.setCurrentTab (n); Я могу изменить только вкладку, а не содержимое. Где mTabsWidget - TabWidget NOT tabHost, а n - позиция выбранной вкладки. :) – kiduxa