Добавляйте какой-то фрагмент непрерывно, затем запаздывание прокрутки RecyclerView - PullRequest
0 голосов
/ 27 марта 2020
  • Добавить какой-либо фрагмент непрерывно, затем RecyclerView отставание прокрутки
  • Я удалил библиотеку загрузки изображений, но улучшения не произошло. У меня такая же проблема.
  • Я также проверяю эту ссылку нажмите
  • добавить фрагмент, чтобы столкнуться с этой проблемой. но замените фрагмент, тогда не столкнувшись с этой проблемой
  • больше добавьте фрагмент, чем RecyclerView отставание Я думаю, что проблема памяти фрагментов

добавить более трех фрагментов непрерывно, а затем столкнуться с этой проблемой

enter image description here

фрагмент xml

<FrameLayout
    android:id="@+id/frameLayout_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolbar_main"
    android:layout_above="@+id/linearLayout_adView_main" />

данные фрагмента вызова

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

    RelatedFragment relatedFragment = new RelatedFragment();
    Bundle bundle = new Bundle();
    bundle.putString("type", "related");
    bundle.putString("post_id", statusLists.getId());
    bundle.putString("cat_id", statusLists.getCid());
    bundle.putString("typeLayout", "Landscape");
    relatedFragment.setArguments(bundle);
    getActivity().getSupportFragmentManager().beginTransaction().add(R.id.frameLayout_main, relatedFragment, string).addToBackStack(string).commitAllowingStateLoss();
}
});

xml файл

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView_sub_category"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginStart="5dp"
    android:layout_marginTop="5dp" />

Фрагмент

public class RelatedFragment extends Fragment {

private Method method;
private OnClick onClick;
private String type, post_id, cat_id, typeLayout;
private ProgressBar progressBar;
private MaterialTextView textView_noData;
private RecyclerView recyclerView;
private List<SubCategoryList> relatedLists;
private SubCategoryAdapter subCategoryAdapter;
private LayoutAnimationController animation;
private Boolean isOver = false;
private int pagination_index = 1;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = LayoutInflater.from(getActivity()).inflate(R.layout.portrait_fragment, container, false);

    GlobalBus.getBus().register(this);

    MainActivity.toolbar.setTitle(getResources().getString(R.string.related_status));

    relatedLists = new ArrayList<>();

    onClick = new OnClick() {
        @Override
        public void position(int position, String title, String type, String status_type, String id, String tag) {

            SCDetailFragment scDetailFragment = new SCDetailFragment();
            Bundle bundle = new Bundle();
            bundle.putString("id", id);
            bundle.putString("type", type);
            bundle.putString("status_type", status_type);
            bundle.putInt("position", position);
            scDetailFragment.setArguments(bundle);
            getActivity().getSupportFragmentManager().beginTransaction().add(R.id.frameLayout_main, scDetailFragment, title).addToBackStack(title).commitAllowingStateLoss();

        }
    };
    method = new Method(getActivity(), onClick);

    assert getArguments() != null;
    type = getArguments().getString("type");
    post_id = getArguments().getString("post_id");
    cat_id = getArguments().getString("cat_id");
    typeLayout = getArguments().getString("typeLayout");

    int resId = R.anim.layout_animation_fall_down;
    animation = AnimationUtils.loadLayoutAnimation(getActivity(), resId);

    progressBar = view.findViewById(R.id.progressbar_portrait_fragment);
    textView_noData = view.findViewById(R.id.textView_portrait_fragment);

    recyclerView = view.findViewById(R.id.recyclerView_portrait_fragment);

    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);

    recyclerView.setHasFixedSize(true);
    recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener(layoutManager) {
        @Override
        public void onLoadMore(int page, int totalItemsCount) {
            if (!isOver) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        pagination_index++;
                        callData();
                    }
                }, 1000);
            } else {
                subCategoryAdapter.hideHeader();
            }
        }
    });

    callData();

    setHasOptionsMenu(true);
    return view;
}

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.search_menu, menu);

    MenuItem searchItem = menu.findItem(R.id.ic_searchView);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    searchView.setOnQueryTextListener((new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            if (method.isNetworkAvailable()) {
                backStackRemove();
                SearchFragment searchFragment = new SearchFragment();
                Bundle bundle = new Bundle();
                bundle.putString("search_menu", query);
                bundle.putString("typeLayout", "Landscape");
                searchFragment.setArguments(bundle);
                getActivity().getSupportFragmentManager()
                        .beginTransaction().replace(R.id.frameLayout_main, searchFragment, query).commitAllowingStateLoss();
                return false;
            } else {
                method.alertBox(getResources().getString(R.string.internet_connection));
            }
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return true;
        }
    }));

    super.onCreateOptionsMenu(menu, inflater);
}

private void backStackRemove() {
    for (int i = 0; i < getActivity().getSupportFragmentManager().getBackStackEntryCount(); i++) {
        getActivity().getSupportFragmentManager().popBackStack();
    }
}

@Subscribe
public void getNotify(Events.FavouriteNotify favouriteNotify) {
    for (int i = 0; i < relatedLists.size(); i++) {
        if (relatedLists.get(i).getId().equals(favouriteNotify.getId())) {
            if (relatedLists.get(i).getStatus_type().equals(favouriteNotify.getStatus_type())) {
                relatedLists.get(i).setIs_favourite(favouriteNotify.getIs_favourite());
                subCategoryAdapter.notifyItemChanged(i);
            }
        }
    }
}

@Subscribe
public void getMessage(Events.InfoUpdate infoUpdate) {
    if (subCategoryAdapter != null) {
        for (int i = 0; i < relatedLists.size(); i++) {
            if (relatedLists.get(i).getId().equals(infoUpdate.getId())) {
                if (relatedLists.get(i).getStatus_type().equals(infoUpdate.getStatus_type())) {
                    switch (infoUpdate.getType()) {
                        case "all":
                            relatedLists.get(i).setTotal_viewer(infoUpdate.getView());
                            relatedLists.get(i).setTotal_likes(infoUpdate.getTotal_like());
                            relatedLists.get(i).setAlready_like(infoUpdate.getAlready_like());
                            break;
                        case "view":
                            relatedLists.get(i).setTotal_viewer(infoUpdate.getView());
                            break;
                        case "like":
                            relatedLists.get(i).setTotal_likes(infoUpdate.getTotal_like());
                            relatedLists.get(i).setAlready_like(infoUpdate.getAlready_like());
                            break;
                    }
                    subCategoryAdapter.notifyItemChanged(i);
                }
            }
        }
    }
}

private void callData() {
    if (getActivity() != null) {
        if (method.isNetworkAvailable()) {
            if (method.pref.getBoolean(method.pref_login, false)) {
                related(method.pref.getString(method.profileId, null), post_id, cat_id, typeLayout);
            } else {
                related("0", post_id, cat_id, typeLayout);
            }
        } else {
            method.alertBox(getResources().getString(R.string.internet_connection));
        }
    }
}

private void related(String userId, String post_id, String cat_id, String typeLayout) {

    if (subCategoryAdapter == null) {
        relatedLists.clear();
        progressBar.setVisibility(View.VISIBLE);
    }

    if (getActivity() != null) {

        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        JsonObject jsObj = (JsonObject) new Gson().toJsonTree(new API(getActivity()));
        jsObj.addProperty("method_name", "related_status");
        jsObj.addProperty("post_id", post_id);
        jsObj.addProperty("cat_id", cat_id);
        jsObj.addProperty("user_id", userId);
        jsObj.addProperty("page", pagination_index);
        jsObj.addProperty("filter_value", typeLayout);
        jsObj.addProperty("lang_ids", method.pref.getString(method.language_ids, ""));
        params.put("data", API.toBase64(jsObj.toString()));
        client.post(Constant_Api.url, params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

                if (getActivity() != null) {

                    String res = new String(responseBody);

                    try {
                        JSONObject jsonObject = new JSONObject(res);

                        if (jsonObject.has(Constant_Api.STATUS)) {

                            String status = jsonObject.getString("status");
                            String message = jsonObject.getString("message");
                            if (status.equals("-2")) {
                                method.suspend(message);
                            } else {
                                method.alertBox(message);
                            }

                        } else {

                            JSONArray jsonArray = jsonObject.getJSONArray(Constant_Api.tag);

                            for (int i = 0; i < jsonArray.length(); i++) {

                                JSONObject object = jsonArray.getJSONObject(i);
                                String id = object.getString("id");
                                String status_type = object.getString("status_type");
                                String status_title = object.getString("status_title");
                                String status_layout = object.getString("status_layout");
                                String status_thumbnail_b = object.getString("status_thumbnail_b");
                                String status_thumbnail_s = object.getString("status_thumbnail_s");
                                String total_likes = object.getString("total_likes");
                                String total_viewer = object.getString("total_viewer");
                                String category_name = object.getString("category_name");
                                String already_like = object.getString("already_like");
                                String quote_bg = object.getString("quote_bg");
                                String quote_font = object.getString("quote_font");
                                String is_favourite = object.getString("is_favourite");

                                relatedLists.add(new SubCategoryList("", id, status_type, status_title, status_layout, status_thumbnail_b, status_thumbnail_s, total_viewer, total_likes, already_like, category_name, quote_bg, quote_font, is_favourite, "", ""));

                            }

                            if (jsonArray.length() == 0) {
                                if (subCategoryAdapter != null) {
                                    isOver = true;
                                    subCategoryAdapter.hideHeader();
                                }
                            }

                            if (subCategoryAdapter == null) {
                                if (relatedLists.size() == 0) {
                                    textView_noData.setVisibility(View.VISIBLE);
                                } else {
                                    textView_noData.setVisibility(View.GONE);
                                    subCategoryAdapter = new SubCategoryAdapter(getActivity(), relatedLists, onClick, type);
                                    recyclerView.setAdapter(subCategoryAdapter);
                                    recyclerView.setLayoutAnimation(animation);
                                }
                            } else {
                                subCategoryAdapter.notifyDataSetChanged();
                            }

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        method.alertBox(getResources().getString(R.string.failed_try_again));
                    }

                }

                progressBar.setVisibility(View.GONE);

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                progressBar.setVisibility(View.GONE);
                method.alertBox(getResources().getString(R.string.failed_try_again));
            }
        });

    }

}

@Override
public void onDestroyView() {
    super.onDestroyView();
    // Unregister the registered event.
    GlobalBus.getBus().unregister(this);
}

}

Адаптер

    public class SubCategoryAdapter extends RecyclerView.Adapter {

    private Activity activity;
    private Method method;
    private int columnWidth;
    private String type;
    private Animation myAnim;
    private List<SubCategoryList> subCategoryLists;

    private final int VIEW_TYPE_LOADING = 0;
    private final int VIEW_TYPE_ITEM = 1;
    private final int VIEW_TYPE_QUOTES = 2;

    public SubCategoryAdapter(Activity activity, List<SubCategoryList> subCategoryLists, OnClick interstitialAdView, String type) {
        this.activity = activity;
        this.type = type;
        this.subCategoryLists = subCategoryLists;
        method = new Method(activity, interstitialAdView);
        columnWidth = (method.getScreenWidth());
        myAnim = AnimationUtils.loadAnimation(activity, R.anim.bounce);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_ITEM) {
            View view = LayoutInflater.from(activity).inflate(R.layout.sub_category_adapter, parent, false);
            return new ViewHolder(view);
        } else if (viewType == VIEW_TYPE_QUOTES) {
            View v = LayoutInflater.from(activity).inflate(R.layout.quotes_adapter, parent, false);
            return new Quotes(v);
        } else if (viewType == VIEW_TYPE_LOADING) {
            View v = LayoutInflater.from(activity).inflate(R.layout.layout_loading_item, parent, false);
            return new ProgressViewHolder(v);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {

        if (holder.getItemViewType() == VIEW_TYPE_ITEM) {

            final ViewHolder viewHolder = (ViewHolder) holder;

            if (status_type.equals("gif")) {
                Glide.with(activity)
                        .asBitmap()
                        .load(subCategoryLists.get(position).getStatus_thumbnail_s())
                        .placeholder(R.drawable.placeholder_landscape).into(viewHolder.imageView);

            } else {
                Glide.with(activity)
                        .load(subCategoryLists.get(position).getStatus_thumbnail_s())
                        .placeholder(R.drawable.placeholder_landscape).into(viewHolder.imageView);
            }

            viewHolder.imageView.setLayoutParams(new RelativeLayout.LayoutParams(columnWidth, columnWidth / 2 - 60));

            viewHolder.textView_title.setText(subCategoryLists.get(position).getStatus_title());

            viewHolder.relativeLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    method.onClickData(position, subCategoryLists.get(position).getStatus_title(), type, subCategoryLists.get(position).getStatus_type(), subCategoryLists.get(position).getId(), "");
                }
            });

        } else if (holder.getItemViewType() == VIEW_TYPE_QUOTES) {

            final Quotes quotes = (Quotes) holder;

            quotes.relativeLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, columnWidth / 2));

            Typeface typeface = Typeface.createFromAsset(activity.getAssets(), "text_font/" + subCategoryLists.get(position).getQuote_font());
            quotes.textView.setTypeface(typeface);

            quotes.textView.setText(subCategoryLists.get(position).getStatus_title());
            quotes.textView.post(new Runnable() {
                @Override
                public void run() {
                    ViewGroup.LayoutParams params = quotes.textView.getLayoutParams();
                    if (params == null) {
                        params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
                    }
                    final int widthSpec = View.MeasureSpec.makeMeasureSpec(quotes.textView.getWidth(), View.MeasureSpec.UNSPECIFIED);
                    final int heightSpec = View.MeasureSpec.makeMeasureSpec(quotes.textView.getHeight(), View.MeasureSpec.UNSPECIFIED);
                    quotes.textView.measure(widthSpec, heightSpec);
                    quotes.textView.setMaxLines(heightSpec / quotes.textView.getLineHeight());
                    quotes.textView.setEllipsize(TextUtils.TruncateAt.END);
                }
            });

            quotes.linearLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    method.onClickData(position, subCategoryLists.get(position).getStatus_title(), type, subCategoryLists.get(position).getStatus_type(), subCategoryLists.get(position).getId(), "");
                }
            });

        }
    }

    @Override
    public int getItemCount() {
        return subCategoryLists.size() + 1;
    }

    public void hideHeader() {
        ProgressViewHolder.progressBar.setVisibility(View.GONE);
    }

    @Override
    public int getItemViewType(int position) {

        if (position != subCategoryLists.size()) {
            if (subCategoryLists.get(position).getStatus_type().equals("quote")) {
                return VIEW_TYPE_QUOTES;
            } else {
                return VIEW_TYPE_ITEM;
            }
        } else {
            return VIEW_TYPE_LOADING;
        }

    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private RelativeLayout relativeLayout;
        private ImageView imageView;
        private MaterialTextView textView_title;

        public ViewHolder(View itemView) {
            super(itemView);

            relativeLayout = itemView.findViewById(R.id.relativeLayout_subCat_adapter);
            imageView = itemView.findViewById(R.id.imageView_subCat_adapter);
            textView_title = itemView.findViewById(R.id.textView_title_subCat_adapter);

        }
    }

    public class Quotes extends RecyclerView.ViewHolder {

        private LinearLayout linearLayout;
        private RelativeLayout relativeLayout;
        private MaterialTextView textView;

        public Quotes(@NonNull View itemView) {
            super(itemView);

            linearLayout = itemView.findViewById(R.id.ll_quotes_adapter);
            textView = itemView.findViewById(R.id.textView_quotes_adapter);
            relativeLayout = itemView.findViewById(R.id.rel_quotes_adapter);

        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder {
        public static ProgressBar progressBar;

        public ProgressViewHolder(View v) {
            super(v);
            progressBar = v.findViewById(R.id.progressBar);
        }
    } }
...