2014-05-14 2 views
0
내가 작업 표시 줄에서 버튼을 가정을 추가 할

의 스택을 이동 :이 조각

을하지만 내가 얻을 이후는, 스택에 첫 조각을 추가 나던 것 같다

public class LoginActivity extends FragmentActivity { 

    private static android.support.v4.app.FragmentManager fm; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()).commit(); 
     } 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     Fragment fragment = this; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_login, 
        container, false); 

      TextView tv = (TextView) rootView.findViewById(R.id.signUpText1); 
      tv.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        FragmentTransaction ft = getFragmentManager() 
          .beginTransaction(); 
        ft.hide(fragment); 
        ft.add(R.id.container, new SignupFragment()); 
        ft.addToBackStack(null); 
        ft.commit(); 
       } 
      }); 

      return rootView; 
     } 
    } 

    public static class SignupFragment extends Fragment { 

     public SignupFragment() { 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      View signupView = inflater.inflate(R.layout.fragment_signup, 
        container, false); 

      ActionBar ab = getActivity().getActionBar(); 
      ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
      ab.setDisplayHomeAsUpEnabled(true); 
      ab.setDisplayShowHomeEnabled(true); 

      return signupView; 
     } 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
     case android.R.id.home: 
      fm = getSupportFragmentManager(); 

      Log.e("LoginActivity", "count entry:" + fm.getBackStackEntryCount()); 
      if (fm.getBackStackEntryCount() > 0) { 
       // fm.popBackStack(); 
      } 
      break; 
     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

} 

제대로 다시 스택 (이 가능합니까?) 는 초보자 질문에 대한 당신과 유감 감사에 조각을 추가하는 방법 : "0 카운트 항목"의 로그.

답변

0

조각과 함께가는 경로를 명확히 할 수 있습니까? 귀하의 질문 PlaceholderFragment가 있으며 거기에서 SignupFragment로 이동한다는 것을 알고 있습니다. 권리? 첫 번째 조각 (PlaceholderFragment가) 그런 식으로

if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
} 

난 당신이 가기 backstack이 조각을 추가 해달라고 생각을 초기화됩니다 이후 그렇게 명확 가기 backstack가 비어 있습니다. 로 대체하십시오.

if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .addToBackStack("optionalName").commit(); 
} 

나는 그것을 해결해야한다고 생각한다.

편집 : 당신이 FragmentManager를 사용하고 위에 당신이 SupportFragmentManager를 사용하고 여기에

switch (item.getItemId()) { 
    case android.R.id.home: 
     fm = getSupportFragmentManager(); 

     Log.e("LoginActivity", "count entry:" + fm.getBackStackEntryCount()); 
     if (fm.getBackStackEntryCount() > 0) { 
      // fm.popBackStack(); 
     } 
     break; 

는, 사람들은 diffrent하고 함께 사용할 수 없습니다, 당신은 하나 하나에 충실. API 11 이하의 하위 API 장치를 지원하려면 SupportFragmentManager를 사용하십시오 (FragmentManager에 고정되어 있지 않은 경우).

FragmentManager에 Fragments를 모두 추가 했으므로 SupportFragmentManager 백 스택은 비어 있습니다.

최고 감사인

+0

활동에는 SignupFragment를 추가하는 버튼이있는 PlaceholderFragment가 표시됩니다. 내가 제안한 바를했으나 도움이되지 않았다. 백 스택이 비어있는 것처럼 보인다. "카운트 항목 : 0" – Yevgeni

+0

당신은 다른 조각 관리자를 사용합니다. fragmentmanager 및 지원 단편 관리자 당신은 오직 단점 관리자 만 사용하는 높은 API만을 지원한다면 em 중 하나만 사용해야합니다 – Marvin