Изменить SpanCount GridLayoutManager динамически - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь изменить SpanCount (количество столбцов в сетке) на GridLayoutManager между 2 и 3 .

настройка SpanCount в onCreate()

 if (getActivity() != null)
            layoutManager = new GridLayoutManager(getActivity(), getPreferenceSpanCount(getActivity()));

получить SpanCount сохраненный с помощью SharedPreferences и изменить Layout (строка элемента RecyclerView) зависит от SpanCount:

private int getSpanCount() {
    if (getPreferenceSpanCount(getActivity()) == 2) {
        return R.layout.pic_items_two;
    } else {
        return R.layout.picture_item;
    }
}

получить SpanCount сохранено с помощью SharedPreferences:

public static Integer getPreferenceSpanCount(Context context) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(SettingsActivity.SHARED_PREFS_SPAN_COUNT, MODE_PRIVATE);
    return sharedPreferences.getInt(SettingsActivity.KEY_SPAN_COUNT, 3);
}

установить SpanCount при получении данных:

private void refreshContent(Boolean setIsServerFilaire) {
    fetchRemoteData(new DataStatus() {
        @Override
        public void onSuccess(List<Post> posts) {
            loading.setVisibility(View.GONE);
            pb.setVisibility(View.GONE);
            if (adapter == null && getActivity() != null) {
                adapter = new MyAdapter(posts, getActivity(), new RecyclerViewClickListener() {
                    @Override
                    public void onClick(View view, Post post) {
                        Intent intent = new Intent(getActivity(), Pop.class);
                        intent.putExtra("img", post.getImgUrl());
                        intent.putExtra("cat", "Gamewave"); 
                        startActivity(intent);

                    }
                }, getSpanCount());
                recyclerView.setAdapter(adapter);
            } else {
                adapter.getItems().clear();
                adapter.getItems().addAll(posts);
                adapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onError(Exception e) {
            slowInternetConnection();
        }
    }, setIsServerFilaire);
}

все работает нормально, но я получаю много отчетов в консоли Google Play под ANRs & Crashes:

java.lang.NullPointerException: в maa.app.Fragments.fragmentAnime $ 3.onSuccess (фрагментAnime.java:87)
в maa.app.Fragments.fragmentAnime $ 6.a (фрагментAnime.java:52) в maa.app.Fragments.fragmentAnime $ 6.onResponse (фрагментAnime.java:2)
на com.android.volley.request.StringRequest.c (StringRequest.java:4)
на com.android.volley.request.StringRequest.a (StringRequest.java:2)
на com.android.volley.ExecutorDelivery $ ResponseDeliveryRunnable.run (ExecutorDelivery.java:30) на android.os.Handler.handleCallback (Handler.java:789) на android.os.Handler.dispatchMessage (Handler.java:98) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6944) в java.lang.reflect.Method.invoke (Method.java) в com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:327) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

...