#android-fragments #android-activity #android-toolbar #android-preferences #android-navigation
#android-фрагменты #android-activity #android-панель инструментов #android-настройки #android-навигация
Вопрос:
Я хочу перейти на дизайн с одним действием с использованием навигационного компонента. Я использую одно действие, а другие являются фрагментами. Для некоторых экранов у меня есть только макеты, без предпочтений. Нет проблем с раздуванием фрагментов. Но я столкнулся с проблемой, когда попытался работать с предпочтениями.
Мои требования: мне нужно раздуть панель инструментов и список предпочтений во фрагменте. Мои подходы:
- Добавьте предпочтение, используя следующий код.
SettingFragment.java
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.setting_main, rootKey);
}
- Настройте панель приложений для компонента навигации.
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mNavController = Navigation.findNavController(view); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(mNavController.getGraph()).build(); Toolbar toolbar = view.findViewById(R.id.the_toolbar); NavigationUI.setupWithNavController(toolbar, mNavController, appBarConfiguration); }
- В теме приложения я использовал макет для предпочтений, который содержит панель инструментов и framelayout.
<style name="Theme.MyApp" parent="@style/Theme.AppCompat.Light.NoActionBar"> ... <item name="preferenceTheme">@style/PreferenceThemeOverlay</item> </style> <style name="PreferenceThemeOverlay"> <item name="android:layout">@layout/fragment_settings </item> </style>
fragment_settings.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@ id/the_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:layout_gravity="bottom"
android:layout_marginBottom="12dp"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@android:id/list_container">
</FrameLayout>
</LinearLayout>
setting_main.xml
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="MyApp"
android:title="My application">
<androidx.preference.Preference
android:icon="@drawable/ic_list1"
android:key="PreferenceList1"
android:title="PreferenceList1" />
<androidx.preference.PreferenceCategory android:key="SecondCategory">
<androidx.preference.Preference
android:icon="@drawable/ic_list2"
android:key="PreferenceList2"
android:title="PreferenceList2" />
</androidx.preference.PreferenceCategory>
</androidx.preference.PreferenceScreen>
Мои проблемы:
Если я это сделаю, я смогу успешно добавить панель инструментов и настройки. Но я вижу мигающую проблему в заголовке во время транзакции от одного фрагмента к другому.
Я много искал, но не нашел подходящих решений. Я новичок.
Мои вопросы:
- Как я могу решить эту проблему?
- Есть ли какой-либо способ работать с предпочтениями в навигационном компоненте, у которого также есть панель инструментов и предпочтения во фрагменте?
- Для других фрагментов, у которых нет предпочтений, я могу раздуть, используя этот код, который отлично работает без проблем с миганием. Есть ли какие-либо способы сделать это для предпочтений, которые также соответствуют моим требованиям?
@Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.setting_main_fragment, container, false); }
Комментарии:
1. Все еще застрял в этой проблеме, с нетерпением ожидая обратной связи