Я пытаюсь реализовать PreferenceFragment для загрузки из AppCompatActivity (или обычной деятельности), и я, похоже, включил его в метод onCreate фрагмента предпочтения, но экран отображается пустым. Ниже изображение:Android PreferenceFragment загружен без ошибок, но экран пуст
У меня есть ощущение, что фрагмент ЗАГРУЗКА за макетом, но я понятия не имею, как это проверить, так как я получаю подобное поведение, даже если я запускаю его на пустой Макет действий с одним FrameLayout. Я пытаюсь отобразить страницу настроек из моей основной, используя onOptionSelected().
Я застрял на этом как неделя, и ни один из ответов, которые я нахожу, не помогает, любая помощь будет очень высоко оценена!
Вот мой код активность:
public class genericActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(Main.appTAG, "onCreate: settings activity");
setContentView(R.layout.activity_generic);
// IF intent message == settings
final Fragment settingsFragment = new SettingsFragment();
getFragmentManager()
.beginTransaction()
.replace(R.id.fragmentParent, settingsFragment)
.addToBackStack(null)
.commit();
getFragmentManager().addOnBackStackChangedListener(
new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
getFragmentManager()
.beginTransaction()
.remove(settingsFragment)
.commit();
}
});
}
}
Макет для деятельности, т.е. activity_generic.xml следующим
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.thesis.deefunkt.thesispractise.genericActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/fragmentParent"
android:fitsSystemWindows="true">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/list">
</ListView>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
Мне не нужна совместимость имеется на самом деле, так как все этот экран выполняет настройки, но сохранил его для последовательного просмотра.
Мой код SettingsFragment выглядит следующим образом:
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
Log.d(Main.appTAG, "onCreate: SettingsFragment ");
}
}
В то время как это работает, у меня есть куча записей журнала, которые я не знаю, как интерпретировать:
D/com.deefunkt.UsbComms: onCreate: settings activity
D/PhoneWindow: *FMB* installDecor mIsFloating : false
D/PhoneWindow: *FMB* installDecor flags : -2139029248
D/AbsListView: Get MotionRecognitionManager
D/Activity: performCreate Call Injection manager
W/Resources: Converting to string: TypedValue{t=0x10/d=0x2580 a=-1}
W/Resources: Converting to string: TypedValue{t=0x10/d=0x8 a=-1}
W/Resources: Converting to string: TypedValue{t=0x10/d=0x1 a=-1}
W/Resources: Converting to string: TypedValue{t=0x10/d=0x0 a=-1}
D/com.deefunkt.UsbComms: onCreate: SettingsFragment
I/InjectionManager: dispatchPreferences > Target : com.thesis.deefunkt.thesispractise.SettingsFragment
D/AbsListView: Get MotionRecognitionManager
I/InjectionManager: dispatchOnViewCreated > Target : com.thesis.deefunkt.thesispractise.SettingsFragment isFragment :true
I/InjectionManager: dispatchOnViewCreated > Target : com.thesis.deefunkt.thesispractise.genericActivity isFragment :false
D/SecWifiDisplayUtil: Metadata value : SecSettings2
D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
D/SRIB_DCS: log_dcs ThreadedRenderer::initialize entered!
D/mali_winsys: new_window_surface returns 0x3000, [1440x2560]-format:1
D/OpenGLRenderer: endAllStagingAnimators on 0x7f65c06600 (RippleDrawable) with handle 0x7f74cff540
Как вы можете видеть , вызывается метод onCreate внутри фрагмента, но я не знаю, что делать с данными журнала.
Заранее благодарен!
Используйте FrameLayout для раздувания фрагмента, а не корневой компоновки Activity. Кроме того, используйте [PreferenceFragmentCompat] (http://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.html), так как вы используете AppCompatActivity –
Извините, вы говорите, что вместо использования LinearLayout , Я должен использовать FrameLayout (но внутри activity_generic.xml), или мне нужно создать новый XML-файл с одним FrameLayout внутри него? Я думал, так как мы определили объект предпочтения, содержащий xml-файл, который использует макет, который использует фрагмент, и мы просто передаем ему контейнер для его ввода? – deefunkt
Вам придется реорганизовать свой код ... Если вы используете Фрагменты, то в макете активности контент не должен идти, а вместо содержимого помещается FrameLayout, где Fragments раздуты http://developer.android. ком/обучение/основы/фрагменты/фрагмент ui.html # AddAtRuntime –