1

У меня есть PreferenceFragment, и он может быть показан внутри Activity. Однако, когда я переключаю Activity на ActionBarActivity, фрагмент не отображается. (Я вижу только панель действий и пустой белый экран ниже.) Тема, которую я использую, - Theme.AppCompat.Light, поэтому мне нужно использовать ActionBarActivity, чтобы отобразить ActionBar.ПредпочтениеФрагмент не показан при использовании 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.content с R.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

Смежные вопросы