2014-07-22 76 views
0

我一直在試圖構建一個用於理解片段背後基本概念的Android應用程序。但我完全無法顯示和隱藏片段。
這裏是我的onClickListner片段顯示/隱藏根本不起作用

代碼
final FragmentManager fragmentManager = getFragmentManager(); 

b.setOnClickListener(new View.OnClickListener() { 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public void onClick(View v) { 
     FragmentTransaction ft = fragmentManager.beginTransaction(); 

     PM_Fragment pm_fragment = new PM_Fragment(); 
     ft.replace(android.R.id.content, pm_fragment); 

     if (pm_fragment.isHidden()) { 
      fragmentManager.beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) 
        .show(pm_fragment) 
        .commit(); 

      b.setText("Hide"); 
     } else { 
      fragmentManager.beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) 
        .hide(pm_fragment) 
        .commit(); 
      b.setText("Show"); 
     } 
    } 
}); 

片段簡直就是我的情況下,文本行。而按鈕應該做的是切換片段的可見性。 有人可以告訴我這段代碼有什麼問題嗎?
而不工作,我的意思是,按鈕不做任何事情,除了將其文本從「隱藏」更改爲「顯示」,然後保持「顯示」,無論您點擊多少次。而這個過程根本不影響片段的行爲。

回答

1

我真的不明白你要在這裏做什麼,但你永遠不會犯ft所以你的Fragment永遠不會被添加到Activity。我也搞不懂兩個內部FragmentTransaction的目的,但它保存說,你切勿需要他們在所有...

全局定義的:

private PM_Fragment pmFragment = new PM_Fragment(); 

和你OnClickListener應該是這樣的:

b.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction ft = fragmentManager.beginTransaction(); 
     ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); 

     if(pmFragment.isAdded()) { 
      ft.remove(pmFragment); 
     } else { 
      ft.replace(android.R.id.content, pmFragment); 
     } 

     ft.commit(); 
    } 
}); 

重要:對於FragmentTransactions工作,Fragment必須具有可en代碼中添加!如果您使用XML添加它們,那麼它們不會受到FragmentTransactions的影響!所以,如果你加入像Fragment這樣:

<fragment 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="at.example.fragments.SomeFragment" /> 

或者比我相信這是問題的至少一部分的一些其他類似的方法。您需要添加Fragment僅在這樣的代碼:

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

    if (savedInstanceState == null) { 
     SomeFragment fragment = SomeFragment.newInstance(); 

     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.replace(R.id.flFragmentContainer, fragment); 
     transaction.commit(); 
    } 
} 

只是一些替代<fragment />標籤像這樣的佈局:

<FrameLayout 
    android:id="@+id/flFragmentContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

它將作爲一個容器爲Fragment你想加上。您可以使用上面的FragmentTransactionFragment添加到此FrameLayout

+0

我編輯了這個問題,請看看是否有幫助 –

+0

幫助什麼? –

+0

從你現有的答案來看,在我看來,你正在爲活動添加一個片段。但是那一部分在我的最後工作得很好。我需要在按下按鈕時切換可視性。 –