2014-02-28 62 views
2

我試圖學習使用片段。Android片段popBackStack並替換不刪除視圖

假設我有一個活動,有2個片段 - FragmentAFragmentB

在我的活動我添加了片段,與我的想法是,當我按下返回鍵刪除片段視圖的能力:

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

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     mFragmentA = new FragmentA(); 
     fragmentTransaction.add(R.id.fragment_container, mFragmentA).addToBackStack("fragA").commit(); 
    } 

,在我FragmentA的觀點,我有2個按鈕。一個據說是爲了回去,另一個是用FragmentB替換FragmentA。

那麼這裏就是FragmentA樣子:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_a_layout, null); 

     Button backButton = (Button) view.findViewById(R.id.frag_a_back); 
     backButton.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       getFragmentManager().popBackStack("fragA", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      } 
     }); 

     Button nextButton = (Button) view.findViewById(R.id.frag_a_next); 
     nextButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 

       FragmentB fragB = new FragmentB(); 

       ft.replace(R.id.fragment_container, fragB).commit(); 
      } 
     }); 

     container.addView(view); 

     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

問: 當我去fragmentB或者如果我按後退按鈕,爲什麼FragmentA的兩個按鈕仍顯示在屏幕上?我想要後退按鈕來刪除FragmentA。片段被移除/分離,但視圖不是?

(我用的FrameLayout的一切,我能看到FragmentA觀點仍然存在),

編輯 ====================== =======

好吧,我意識到有一個onDestroyView()方法,但我不知道是否正確的方式來刪除我的FragmentA的意見?

它需要我堅持父視圖的一個實例,並引用var到我的片段佈局視圖;這樣我可以使用父視圖在這裏刪除所有視圖

回答

5

你不需要明確地做container.addView(view);。只需返回充氣的視圖。以下更改可能會有所幫助。

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     super.onCreateView(inflater, container, savedInstanceState); 
     View view = inflater.inflate(R.layout.fragment_a_layout, null); 

     Button backButton = (Button) view.findViewById(R.id.frag_a_back); 
     backButton.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       getFragmentManager().popBackStack("fragA", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      } 
     }); 

     Button nextButton = (Button) view.findViewById(R.id.frag_a_next); 
     nextButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 

       FragmentB fragB = new FragmentB(); 

       ft.replace(R.id.fragment_container, fragB).commit(); 
      } 
     }); 

     //container.addView(view); 

     return view; 
    }