2013-06-27 2 views
3

조각 및 tabHost를 사용하고 있으며 모든 것이 잘 작동합니다. 내가 뭘해야이다 : 나는 버튼을 누르면, 그것은 또 다른 조각에 데려다 가지고 있는데 탭의 표시 변경해야합니다 : I 버튼을 누르면버튼을 눌렀을 때 탭의 표시기 변경 (Fragments 및 tabHost)

enter image description here

는 단편 변경을하지만, 탭 표시기는 그렇지 않습니다.

지금은 표시기는 Tab 키를 누를 때만 바뀌지 만 단추를 누를 때도 동일한 효과를 원합니다. 이것이 가능한가?.

CODE :

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

사용자 정의 탭을 사용하거나 라이브러리를 사용하고 있습니까? – TheFlash

+0

Im은 어떤 라이브러리도 사용하지 않고 있습니다. android.widget.TabHost; 도움이된다면 몇 가지 코드를 넣을 것입니다. 잠깐만. – kiduxa

+0

관련 코드를 게시하면 쉽게 도움을받을 수 있습니다. – TheFlash

답변

4

전화 tabHost 위젯과 n가 선택할 수있는 탭의 위치입니다 tabHost.setCurrentTab(n)

.

+0

감사합니다. – kiduxa

+0

다른 방법이 있습니까? 내 말은,이 작업을 수행하면 내용 조각이로드되고 탭 표시기 만 변경하기를 원합니다. 이것이 가능한가? – kiduxa

+0

ok for mTabsWidget.setCurrentTab (n); 탭이 아니라 내용 만 변경할 수 있습니다. 여기서 mTabsWidget은 TabWidget이 아니며 tabHost가 아니고 n은 선택된 탭의 위치입니다. :) – kiduxa

관련 문제