1

我有一個PreferenceFragment,它可以顯示在Activity的內部。但是,當我將Activity切換到ActionBarActivity時,該片段未顯示。 (我只能在下面看到一個動作欄和一個空白的白色屏幕。)我使用的主題是Theme.AppCompat.Light,因此我需要使用ActionBarActivity才能顯示ActionBarPreferenceFragment使用ActionBarActivity時未顯示

這裏是我的原代碼:

public class SettingsActivity extends Activity { // later changed to extend ActionBarActivity  

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

     // Display the fragment as the main content 
     getFragmentManager().beginTransaction(). 
       replace(android.R.id.content, new SettingsFragment()).commit(); 
    } 
} 
+0

向後兼容性不是我最關心的問題(我的'minSdkVersion'是16)。我使用'ActionBarActivity',因爲這是我可以用更新的材質主題顯示'ActionBar'的方式。你能提出我能做些什麼嗎?爲什麼PreferenceFragment和託管的ActionBarActivity在不同的庫中會導致問題呢? – Jonas

+0

在Android 5.0 Lollipop中,您應該使用小部件'ToolBar'替換ActionBar。並使用'getSupportFragmentManager()'替換'getFragmentManager()'。 – Xcihnegn

回答

1
我伸出 ActionBarActivity和我 PreferenceFragment作品

我認爲您需要在您的活動中調用setContentView()以獲取片段將要加載的活動佈局。

activity_preference_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="your.package.SettingsActivity"> 

    <include layout="@layout/toolbar"/> 

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

    </FrameLayout> 
</LinearLayout> 

那麼你的活動應該是這樣的:

public class SettingsActivity extends ActionBarActivity {  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_preference_layout); 

     getFragmentManager().beginTransaction(). 
       replace(R.id.preference_container, new SettingsFragment()).commit(); 
    } 
} 

請注意,我把它換成android.R.id.contentR.id.preference_container,這是在上面的佈局定義的框架。

+0

但爲什麼'getFragmentManager()。beginTransaction()。replace(android.R.id.content,new SettingsFragment())。commit();'當我只是在擴展'Activity'時工作? – Jonas

+0

我不知道'android.R.id.content'是什麼,但我認爲這可能會導致你的問題'ActionBarActivity'。 – natario

+0

感謝您的解決方案,您是老闆。 – David

相關問題