Почему привязка во фрагменте в разделе «Мои действия» отображается как ноль при установке ночного режима? - PullRequest
0 голосов
/ 20 июня 2019

Я использовал встроенный Viewpager fragment и адаптировался к ночному режиму. Когда я включил ночной режим, я обнаружил, что действие было восстановлено, и, конечно, фрагмент также был.

Режим Ngiht: UiModeManager.setNightMode(android.app.UiModeManager.MODE_NIGHT_YES);

Я думаю, они перезагружают ресурсы, предназначенные для ночного режима, и перезагружают представление. Но когда я инициализирую recyclerView (в одном из фрагментов), он становится нулевым.

Если я положу всю инициализацию в onCreateView, похоже, она инициализируется нормально. Но я называю это из активности, это все еще нуль

MainActivity: url

// in MainActivity
if (isDarkMode) {
        PreferenceUtil.getDefault(MainActivity.this)
                .edit().putBoolean(Values.SharedPrefsTag.DARK_MODE, false).apply();
        UiModeManager UiModeManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);
        UiModeManager.setNightMode(android.app.UiModeManager.MODE_NIGHT_NO);
        mMainBinding.navigationView.getMenu().findItem(R.id.dart_mode).setChecked(false);
    } else {
        PreferenceUtil.getDefault(MainActivity.this)
                .edit().putBoolean(Values.SharedPrefsTag.DARK_MODE, true).apply();
        UiModeManager UiModeManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);
        UiModeManager.setNightMode(android.app.UiModeManager.MODE_NIGHT_YES);
        mMainBinding.navigationView.getMenu().findItem(R.id.dart_mode).setChecked(true);
    }

public final class MusicListFragment extends BaseListFragment {

    public static final String TAG = "MusicListFragment";

    public FragmentMusicListBinding mMusicListBinding;

    private MyRecyclerAdapter adapter;

    private MainActivity mActivity;

    @Override
    public void reloadData() {
        Data.sMusicItems.clear();
        Data.sMusicItemsBackUp.clear();
        adapter.notifyDataSetChanged();
        loadData();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mMusicListBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_music_list, container, false);
        loadData();
        return mMusicListBinding.getRoot();
    }


    public void initRecyclerView() {
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mActivity) {
            @Override
            protected int getExtraLayoutSpace(RecyclerView.State state) {
                return 700;
            }
        };
        linearLayoutManager.setItemPrefetchEnabled(true);
        linearLayoutManager.setInitialPrefetchItemCount(15);

        adapter = new MyRecyclerAdapter(mActivity, Data.sMusicItems
                , new MyRecyclerAdapter.Config(PreferenceUtil.getDefault(mActivity).getInt(Values.SharedPrefsTag
                .RECYCLER_VIEW_ITEM_STYLE, 0), true));
        mMusicListBinding.includeRecycler.recyclerView.setLayoutManager(linearLayoutManager);
        mMusicListBinding.includeRecycler.recyclerView.setHasFixedSize(true);
        mMusicListBinding.includeRecycler.recyclerView.setItemViewCacheSize(15);
        mMusicListBinding.includeRecycler.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                    GlideApp.with(mActivity).resumeRequests();
                } else {
                    GlideApp.with(mActivity).pauseRequests();
                }
            }
        });
        mMusicListBinding.includeRecycler.recyclerView.setAdapter(adapter);

    }
}

Когда я установлю ночной режим, MainActivity вызовет initRecyclerView() метод musicListActivity, но у него будет нулевой указатель. Но я нормально запускаю приложение нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...