2013-09-25 50 views
0

我遇到了麻煩,我的看法。基本上我使用片段這裏是我的屏幕截圖。
相片A photo A 照片乙 photo Bandroid替換視圖(片段)

不介意的選項卡。當我在照片AI的右上角單擊設置膨脹Settings Layout 那麼如果我點擊帳戶設置的替代Settings Layout通過Account Detail佈局

後,如果我要退出,我會點擊設置,但我的屏幕還是得到了「帳戶詳細「頁面,這是照片B,但它必須是Settings Layout(照片A)

我不知道如何實現這一點。以下是我的代碼。

設置按鈕: Fragment fragment => getFragmentManager()。findFragmentById( android.R.id.content);如果(片段= NULL & & fragment.isInLayout()!){} 其他{

  //fragment 
      SharedPreferences.Editor editor = getPreferences(0).edit(); 
      editor.putString("user_name", user_name); 
      editor.putInt("user_id", user_id); 
      editor.commit(); 

      Fragment mFragment = new SettingsFragment(); 

      FragmentTransaction ft = getFragmentManager() 
        .beginTransaction(); 
      ft.replace(android.R.id.content, mFragment, "settings"); 
      ft.commit(); 

     } 
在我的片段

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {  
     if (view != null) { 
      ViewGroup parent = (ViewGroup) view.getParent();   // 
      System.out.println("asd"+parent); 
      if (parent != null) { 
     parent.removeView(view); 
      } 
     } else { 

    } 
return view; 
} 

我的帳戶設置按鈕:

account.setOnClickListener(new View.OnClickListener() {    @Override   public void onClick(View v) { 
       Fragment mFragment = new AccountSettings(); 

       FragmentTransaction ft = getFragmentManager() 
         .beginTransaction(); 

       ft.replace(R.id.lists, mFragment); 

       // ft.addToBackStack(null); 
       ft.commit();   }  }); 

請不用我,我是新來的android.Any建議和意見將是很大的幫助。由於

+0

而不是替換你可以使用「添加」,然後當你想回去你可以只彈出你想解僱的片段 –

+0

@Yume117流行的代碼是什麼? – CaffeineShots

+0

Android文檔:http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack%28java.lang.String,%20int%29 –

回答

1

例如:

這會彈出這個片段標籤

@Override 
    public void onBackPressed() { 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     int stackSize = fragmentManager.getBackStackEntryCount(); 
     if (stackSize == 0) { 
      finish(); 
     } 
     else { 
      String fragmentTag = fragmentManager.getBackStackEntryAt(stackSize - 1).getName(); 
      fragmentManager.popBackStack(fragmentTag, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     } 
    } 

最後一個片段過渡,這是一種方式做過渡

 @Override public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

        CustomFragment fragment = new CustomFragment(); 
        getActivity() 
         .getSupportFragmentManager() 
         .beginTransaction() 
         .setCustomAnimations(R.animator.anim_back_right,R.animator.anim_back_left, R.animator.anim_left, R.animator.anim_right) 
         .add(R.id.custom_fragment, fragment) 
         .addToBackStack(MainActivity.THIS_FRAGMENT_TAG) 
         .commit(); 
     } 

的想法是在這裏

+0

我看到..我嘗試重新做一些我的代碼。 +1 – CaffeineShots

+0

嘗試一步一步做到這一點。一點點有效,所以你不會鬆動它;) –

1
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {  
     if (view != null) { 
      ViewGroup parent = (ViewGroup) view.getParent();   // 
      System.out.println("asd"+parent); 
      if (parent != null) { 
     parent.removeView(view); 
      } 
     } else { 

    } 
return view; 
} 

更改爲

Fragment mFragment = new Settings(); 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      System.out.println(view); 
      if (view != null) { 

       ViewGroup parent = (ViewGroup) view.getParent(); 
       // System.out.println("asd"+parent); 
       if (parent != null) { 
        parent.removeView(view); 

       } else { 
        FragmentTransaction ft = getFragmentManager() 
          .beginTransaction(); 
        ft.detach(mFragment); 
        ft.attach(mFragment); 
        ft.replace(R.id.lists, mFragment); 
        ft.commit(); 
        //System.out.println("saadasd"); 
       } 
      } else { 
       try { 
        view = inflater.inflate(R.layout.selectionfrag, container, 
          false); 

        FragmentTransaction ft = getFragmentManager() 
          .beginTransaction(); 
        ft.replace(R.id.lists, mFragment); 
        ft.commit(); 
       } catch (InflateException e) { 

       } 
      } 

      return view; 
     } 

我只是分離片段並附加它,然後替換內容。

ft.detach(mFragment); 
ft.attach(mFragment); 
ft.replace(R.id.lists, mFragment); 

但我不知道這是否是最佳做法。誰能告訴?