Thursday 5 November 2020

Problem not visible item in Honor 6x (Recyclerview with StaggeredGridLayoutManager)

I am using Recyclerview whose layer is StaggeredGridLayoutManager. The problem is that in most phones the items are displayed but in Honor 6x phones the items are not displayed but they can be clicked.

I set the items rotationY:180 to show right to left.

I even used GridLayoutManager but it still has the same problem.

Screenshot on all phones enter image description here

On the Honor 6x phone enter image description here

Recyclerview Widget

    public class AutoFitGridRecyclerView extends RecyclerView {
    private StaggeredGridLayoutManager manager;
    private int columnWidth = -1;

    public AutoFitGridRecyclerView(Context context) {
        super(context);
        init(context, null);
    }

    public AutoFitGridRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public AutoFitGridRecyclerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        if (attrs != null) {
            // list the attributes we want to fetch
            // columnWidth is what GridView uses, so we use it too
            int[] attrsArray = {
                    android.R.attr.columnWidth
            };

            TypedArray array = context.obtainStyledAttributes(attrs, attrsArray);

            //retrieve the value of the 0 index, which is columnWidth
            columnWidth = array.getDimensionPixelSize(0, -1);
            array.recycle();
        }

        manager = new StaggeredGridLayoutManager(AppController.NumberColumnAutoFitForRecyclerViewForGridList(120), 1);
        setLayoutManager(manager);
    }

    @Override
    protected void onMeasure(int widthSpec, int heightSpec) {
        super.onMeasure(widthSpec, heightSpec);

        if (columnWidth > 0) {
            //The spanCount will always be at least 1
            int spanCount = Math.max(1, getMeasuredWidth() / columnWidth);
            manager.setSpanCount(spanCount);
        }
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return super.dispatchTouchEvent(ev);
    }
}

in Activity layout

<com.mrsanad.Application.Widgets.AutoFitGridRecyclerView
            android:id="@+id/gridMenu"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="10dp"
            android:rotationY="180" />

in item layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bRow"
    android:layout_width="110dp"
    android:layout_height="110dp"
    android:layout_marginTop="5dp"
    android:background="@android:color/transparent"
    android:clickable="true"
    android:focusable="true"
    android:gravity="center"
    android:orientation="vertical"
    android:rotationY="180">

    <com.balysv.materialripple.MaterialRippleLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:focusable="true"
        app:mrl_rippleAlpha="0.2"
        app:mrl_rippleColor="@color/colorPrimary"
        app:mrl_rippleDuration="350"
        app:mrl_rippleOverlay="true"
        app:mrl_rippleRoundedCorners="100dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_above="@+id/layoutTitle">

                <ImageView
                    android:id="@+id/imgIcon"
                    android:layout_width="65dp"
                    android:layout_height="65dp"
                    android:layout_centerInParent="true"
                    android:padding="12dp" />

                <com.mrsanad.Application.Widgets.BadgeTextView
                    android:id="@+id/tvCount"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_centerInParent="true"
                    android:gravity="center"
                    android:padding="0.5dp"
                    android:textColor="@color/White"
                    android:textSize="@dimen/SmallTextSize" />

            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/layoutTitle"
                android:layout_width="match_parent"
                android:layout_height="39dp"
                android:layout_alignParentBottom="true">

                <com.mrsanad.Application.Widgets.PersianTextViewBold
                    android:id="@+id/tvTitle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="2dp"
                    android:gravity="center"
                    android:maxLines="2"
                    android:textColor="@color/Gray"
                    android:textSize="@dimen/SmallTextSize" />

            </RelativeLayout>

        </RelativeLayout>

    </com.balysv.materialripple.MaterialRippleLayout>
</LinearLayout>

in Adapter java

package Adapters.ActMain;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.mrsanad.Application.Utility.Variable;
import com.mrsanad.Network.Models.Response.Home.GetHome.Menu;
import com.mrsanad.R;
import com.mrsanad.Application.Utility.AppController;
import com.mrsanad.Application.Widgets.BadgeTextView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;

public class AdpMenu extends RecyclerView.Adapter<AdpMenu.ViewMenu> {

    private List<Menu> Items = new ArrayList<>();

    public AdpMenu() {
    }

    public void AddItems(List<Menu> items) {
        Items.addAll(items);
        notifyDataSetChanged();
    }

    public Menu GetItem(int pos) {
        return Items.get(pos);
    }

    @NonNull
    @Override
    public ViewMenu onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(AppController.Context)
                .inflate(R.layout.item_home_menu, parent, false);
        return new ViewMenu(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewMenu holder, int position) {
        Menu item = GetItem(position);

        holder.tvTitle.setText(item.NameFa);
        AppController.SetPicUrl(holder.imgIcon, item.ImagePath, 0, "");
        holder.tvCount.setVisibility(View.GONE);
    }

    @Override
    public int getItemCount() {
        return Items.size();
    }

    public void Clear() {
        Items.clear();
        notifyDataSetChanged();
    }

    public class ViewMenu extends RecyclerView.ViewHolder {

        @BindView(R.id.imgIcon)
        ImageView imgIcon;
        @BindView(R.id.tvTitle)
        TextView tvTitle;
        @BindView(R.id.layoutTitle)
        RelativeLayout layoutTitle;
        @BindView(R.id.tvCount)
        BadgeTextView tvCount;

        public ViewMenu(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);

            tvCount.setStrokeWidth(1);
            tvCount.setStrokeColor(AppController.Context.getString(R.color.White));
            tvCount.setSolidColor(AppController.Context.getString(R.color.Orange));
        }
    }
}

in Java Actvity

@BindView(R.id.gridMenu)
    RecyclerView gridMenu;

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_main);

        AdpMenu AdpMenu = new AdpMenu();
    gridMenu.setAdapter(AdpMenu);

       AdpMenu.AddItems(\\All items list);

    }


from Problem not visible item in Honor 6x (Recyclerview with StaggeredGridLayoutManager)

No comments:

Post a Comment