2013-07-03 4 views
0

actionbarsherlock을 사용하여 조각으로 작업하는 방법을 배우려고합니다. 나는 this tutorial을 따르려고 노력했다. 액션 바의 일부가 아닌 또 다른 단편을 만들려고 할 때까지 모든 것이 작동했습니다. 사용자는 조각 중 하나의 버튼을 클릭 :
enter image description here
그리고 그 조각이 열립니다
enter image description here
내가 뒤로 버튼을 클릭하고 이전 조각으로 돌아가려면. 이것은 내가 그것을 시도하는 방법을합니다 - 가기 backstack이 조각을 추가 :이 단계에서 뒤로 버튼을 클릭하면actionbarsherlock 조각 및 백 스택 관련 문제

public void onClick(View v) { 
    switch (v.getId()){ 
    case R.id.btn1: 
     ft.replace(R.id.fragment_container, Fragment_Products); 
     ft.addToBackStack(null); 
     ft.commit(); 
     break; 
    } 
} 

이 - 작동, 내가 이전의 단편 (카탈로그)로 돌아갑니다. 그러나이 시점에서 예를 들어 "사회"와 같은 다른 탭으로 이동하여 뒤로 버튼을 누르면 다음과 같이 표시됩니다.
enter image description here
두 조각이 서로 겹치고 있습니다. 다른 탭을 계속 클릭하면 더 많은 것을 망칠 수 있습니다 (비디오가 있지만 여기에 비디오를 포함 할 수없는 것 같습니다).

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionBar.setTitle("Fragments app"); 

    ActionBar.Tab FragmentSocialTab = actionBar.newTab().setText("Social") 
      .setIcon(android.R.drawable.star_on); 
    ActionBar.Tab FragmentWebTab = actionBar.newTab().setText("Web"); 
    ActionBar.Tab FragmentCatalogTab = actionBar.newTab().setText("Catalog"); 

    Fragment Fragment_Social = new Fragment_Social(); 
    Fragment Fragment_Web = new Fragment_Web(); 
    Fragment Fragment_Catalog = new Fragment_Catalog(); 

    FragmentSocialTab.setTabListener(new TabsListener(Fragment_Social)); 
    FragmentWebTab.setTabListener(new TabsListener(Fragment_Web)); 
    FragmentCatalogTab.setTabListener(new TabsListener(Fragment_Catalog)); 

    actionBar.addTab(FragmentCatalogTab); 
    actionBar.addTab(FragmentWebTab); 
    actionBar.addTab(FragmentSocialTab); 

    actionBar.setSelectedNavigationItem(2); 
} 

그리고 내 탭 리스너의 코드 :

이것은 내 주요 활동의 코드

class TabsListener implements ActionBar.TabListener{ 
    public Fragment fragment; 

    public TabsListener(Fragment fragment){ 
     this.fragment = fragment; 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.replace(R.id.fragment_container, fragment); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub  
    } 
} 

왜 일어나고 어떻게 고정 할 수있다?

+0

: 나는 당신을 제안

은 자세한 내용은 onTabUnselected

 if (mFragment != null) { ft = mActivity.getSupportFragmentManager().beginTransaction(); ft.hide(mFragment); //hide old fragment ... ft.detach(mFragment); //detach ft.commitAllowingStateLoss(); } 

에서 같은 것을 할, 나는이 (당신을 도움이 될 것입니다 샘플 TabListener 코드를 포함) 권장 'R.id.btn1'을 말하는 겁니까? 'fragmentManager.popBackStack()'메소드를 통해 백 스택으로 이동할 수 있습니다. –

+0

아니요, 기기의 실제 버튼 (이 경우에는 에뮬레이터)을 의미합니다. 'R.id.btn1'은 액션 바 탭의 일부가 아닌 새로운 조각을 열어야합니다. – Igal

+1

[this] (https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock-samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabsPager.java)을 살펴보고 휴대용 소형 무선 호출기. 이렇게하면 두드리기가 덜하고 덜 두통이 생깁니다. –

답변

관련 문제