2014-11-25 6 views
0

조각을 사용하여 Android 앱을 만들고 있지만 이전에는 조각을 경험하지 않았습니다. 이전 조각으로 돌아 가기

나는 내가 메인 뷰를로드 주 FragmentActivity이 있고 난 내 조각 클래스 전화 :

public class MainActivity extends FragmentActivity { 

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

     setContentView(R.layout.main_view); 
     FragmentTransaction FT = getFragmentManager().beginTransaction(); 

     if (findViewById(R.id.fragmentAction) != null) { 

      FT.replace(R.id.fragmentAction, MainMenuFragment.newInstance(
        getString(R.string.main_menu), getApplicationContext())); 

     } 

     FT.addToBackStack(null); 
     FT.commit(); 
    } 
@Override 
    public void onBackPressed() { 

    } 

그리고 이것은 내가 다른 조각에 버튼 호출 밀어 내 fragmet의 classm입니다 :

public class MainMenuFragment extends Fragment { 

     private static String my_description = ""; 
     private static Context my_context = null; 

     public static MainMenuFragment newInstance(String description, 
       Context context) { 
      my_description = description; 
      my_context = context; 
      MainMenuFragment f = new MainMenuFragment(); 
      return f; 
     } 

     public MainMenuFragment() { 

     } 



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

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      super.onCreateView(inflater, container, savedInstanceState); 
      View view = null; 

      if (my_description.compareTo(getString(R.string.main_menu)) == 0) { 

       view = inflater.inflate(R.layout.main_menu, container, false); 

      } 

      return view; 
     } 



     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      if (my_description.compareTo(getString(R.string.main_menu)) == 0) { 

       Button new_user = (Button) getView().findViewById(
         R.id.button_newUser); 
       new_user.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 

         FragmentTransaction FT = getFragmentManager() 
           .beginTransaction(); 
         FT.replace(R.id.fragmentAction, LdapFragment.newInstance(
           getString(R.string.new_user), my_context)); 
         FT.commit(); 

        } 
       }); 



      } 

     } 


    } 

내 질문은 : 키를 뒤로 밀면 이전에 조각으로 돌아가려면 어떻게해야합니까? 내 FragmentActivity에서 onBackPressed 함수를 추가하고 이벤트를 캡처하지만 무엇을해야합니까?

+0

단지 super.onBackPressed()를 추가하십시오. onBackPressed() – Neji

+1

이 [공식 가이드] (http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments)를 확인하십시오. 프래그먼트를 변경하기 전에'onClick' 메소드에서'addToBackStack'을 Preform하십시오. 처음에 Activity를 추가 할 때가 아닙니다. –

답변

0

다음 코드는 내가 사용하는 코드입니다. 당신은 아무것도 할 필요가 없습니다. 안드로이드 시스템은 backpress을 처리하고 super.onBackPressed(); 전화를 놓친 탐색 순서

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     if (getFragmentManager().getBackStackEntryCount() == 0) 
      finish(); 
} 

에서 적절한 조각을 보여줍니다. 코드에 추가해보십시오.

+0

나는 이것을 시도했지만, 항상 if를 실행하고 애플리케이션을 끝내기도하고, 정확하게 조각을 실행하지 않을 수도있다. – user3086708

+0

if 블록에 주석을 달고 그 것이 작동하는지 확인한다. – Neji

1

사용

@Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
     if (getSupportFragmentManager().getBackStackEntryCount() == 0) { 
      this.finish(); 
     } else { 
      getSupportFragmentManager().popBackStack(); 
      removeCurrentFragment(); 
     } 
    } 



    public void removeCurrentFragment() { 
     FragmentTransaction transaction = getSupportFragmentManager() 
       .beginTransaction(); 
     Fragment currentFrag = getSupportFragmentManager().findFragmentById(
       R.id.fragment_container); 
     setFragName("NONE"); 
     if (currentFrag != null) { 
      setFragName(currentFrag.getClass().getSimpleName()); 
     } 
     if (currentFrag != null) { 
      transaction.remove(currentFrag); 
     } 
     transaction.commit(); 

    } 
0

그냥 다시 조각을 추가하기위한 방법을 만들이 코드. onCreate() 또는 활동의 onResume()에서 예를 들어

,

public void setFragment(Fragment fragment, boolean backStack, String tag) { 
    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = manager.beginTransaction(); 
    if (backStack) { 
     fragmentTransaction.addToBackStack(tag); 
    } 
    fragmentTransaction.replace(R.id.fragmentAction, MainMenuFragment.newInstance(
       getString(R.string.main_menu), tag); 
    fragmentTransaction.commit(); 
} 

호출 방법.