2014-07-16 94 views
1

我有一個Activity與四個按鈕在底部像標籤。通過按任意按鈕,一個新的Fragment會顯示在這些按鈕上方的FrameLayout中,就像我們在TabActivity中所做的那樣。請參閱我的問題here。現在我想我應該找到隱藏和顯示這些片段的方法。請告訴我如何顯示並隱藏片段,而無需重新加載。如何顯示隱藏片段?

主要顯示隱藏片段的目的是保持其當前狀態。在我的一個片段中,每當我在片段之間切換時,我都有一個AsyncTask,它再次調用AsynTask。

回答

2

//顯示片段時,它被隱藏

FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction() 
      .show(fragment1) 
      .commit(); 

//隱藏片段

FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction() 
      .hide(fragment1) 
      .commit(); 
+0

感謝代碼+10 – Nepster

1

你不能被某個視圖傳似

申報4的FrameLayout

private FrameLayout fragment1; 
private FrameLayout fragment2; 
private FrameLayout fragment3; 
private FrameLayout fragment4; 

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.fragment1, Fragment1.newInstance()); 
ft.replace(R.id.fragment2, Fragment2.newInstance()); 
ft.replace(R.id.fragment3, Fragment3.newInstance()); 
ft.replace(R.id.fragment4, Fragment4.newInstance()); 
ft.commit(); 

,並可見或玩去了?像

fragment1.setVisibility(View.Visible); 
fragment2.setVisibility(View.gone); 
fragment3.setVisibility(View.gone); 
fragment4.setVisibility(View.gone); 

順便說一句:對我的作品 - > 公共類活動擴展ActionBarActivity {

private FrameLayout fragment1; 
private FrameLayout fragment2; 

private Button bt1; 
private Button bt2; 

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

    fragment1 = (FrameLayout) findViewById(R.id.fragment1); 
    fragment2 = (FrameLayout) findViewById(R.id.fragment2); 

    bt1 = (Button) findViewById(R.id.button); 
    bt2 = (Button) findViewById(R.id.button2); 

    bt1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      fragment1.setVisibility(View.VISIBLE); 
      fragment2.setVisibility(View.GONE); 
     } 
    }); 

    bt2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      fragment1.setVisibility(View.GONE); 
      fragment2.setVisibility(View.VISIBLE); 
     } 
    }); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment1, new Fragment1()); 
    ft.replace(R.id.fragment2, new Fragment2()); 
    ft.commit(); 
} 
+0

個片段不是視圖。他們是object.setVisiblity不是一個有效的方式閱讀鏈接的問題http://stackoverflow.com/questions/24774631/asynctask-is-re-executing-while-switching-between-fragments – Nepster

+0

是的,但framelayout是視圖。你可以直接玩這個視圖 – u53r

+0

我只有一個frameLayout在XML中。我想用TabActivity中的其他方法替換它。並且替換兩個工作一起刪除和添加。我的意思是更換==(移除當前碎片+添加其他碎片) – Nepster