Как исправить ошибку «деление на ноль» в SpannedGridLayoutManager в приложении для Android - PullRequest
0 голосов
/ 24 октября 2019

Мне нужно сделать SpannedGridLayoutManager для моего приложения, но когда я его запускаю, появляется ошибка:

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.loginproject,PID: 6377. java.lang.ArithmeticException: разделить на ноль в com.arasthel.spannedgridlayoutmanager.SpannedGridLayoutManager.fillAfter (SpannedGridLayoutManager.kt: 623) в com.arasthel.spannedgridlayoutmanager.Spanned Sprid.GlanGridLayManGridLageManLageMailGillGay.spannedgridlayoutmanager. ) в android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:4194) в android.view.View.layout (View.java:17564) в android.view.ViewGroup.layout (ViewGroup.java:5654)на android.support.constraint.ConstraintLayout.onLayout (ConstraintLayout.java:1915) наandroid.view.View.layout (View.java:17564) в android.view.ViewGroup.layout (ViewGroup.java:5654) в android.widget.FrameLayout.layoutChildren (FrameLayout.java:323) в android.widget.FrameLayout.onLayout (FrameLayout.java:261) в android.view.View.layout (View.java:17564) в android.view.ViewGroup.layout (ViewGroup.java:5654) в android.support.constraint.ConstraintLayout.onLayout (ConstraintLayout.java:1915) в android.view.View.layout (View.java:17564) в android.view.ViewGroup.layout (ViewGroup.java:5654) в android.support.v7.widget.RecyclerView $ LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9322) в android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1615) в android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.jroid.suort.17) .15)v7.widget.LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:612) в android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3924) в android.support.v7.widget.RecyclerView.onMeasure (RecyclerView.java:3336) в android.view.View.measure (View.java:19826) в android.support.constraint.ConstraintLayout.internalMeasureChildren (ConstraintLayout.java:1227) в android.support.constraint.ConstraintLayout.onMeasure (ConstraintLayout.java:1572) в android.view.View.measure (View.java:19826) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6162) в android.widget.FrameLayout.MeFrameLayout.java:185) в android.support.v7.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java:143) в android.view.View.measure (View.java:19826) в android.view.ViewGroup.measureChildWithMargins (.java: 6162. на android.view.View.measure (View.java:19826) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6162) на android.widget.FrameLayout.onMeasure (FrameLayout.java:185) в android.view.View.measure (View.java:19826) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6162) в android.widget.LinearLout.measureChildBeforeLayout (LinearLayout.java:1464) в android.widget.LinearLayout.measureVertical (LinearLayout.java:758) в android.widget.LinearLayout.onMeasure (LinearLayout.java:640) в android.view.me.me. Java: 19826)на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6162) на android.widget.FrameLayout.onMeasure (FrameLayout.java:185) на com.android.internal.policy.DecorView.onMeasure (DecorView.java:692 at)android.view.View.measure (View.java:19826) в android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2335) в android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1410) в android.Iot.Ro. СвойствоХореограф $ CallbackRecord.run (Choreographer.java:871) в android.view.Choreographer.doCallbacks (Choreographer.java:683) в android.view.Choreographer.doFrame (Хореограф.java:619) в android.rapisreRereceRiver.run (Хореограф.java:857) на android.os.Handler.handleCallback (Handler.java:751) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6311) на java.lang.reflect.Method.invoke (собственный метод)на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:872) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762)

иесли вы поставите SpannedGridLayoutManager.Orientation.VERTICAL, то элементы не будут отображаться. Я попытался использовать LinearLayoutManager, и все было хорошо отражено.

val user = list[position]
        val list = ArrayList<String>()
for (p in user) {
            if (p.photo!= null && p.photo!="")
                list.add(p.photo!!)
}

val spannedGridLayoutManager = SpannedGridLayoutManager(
                orientation = SpannedGridLayoutManager.Orientation.VERTICAL,
                spans = 4)
        mAdapter = Adapter()
        spannedGridLayoutManager.spanSizeLookup = SpannedGridLayoutManager.SpanSizeLookup{
            SpanSize(2, 2)
        }
        holder.view.rec_im.adapter = mAdapter
        holder.view.rec_im.layoutManager = spannedGridLayoutManager
        mAdapter.update(activity, context, list)

Адаптер

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val photo = list[position]
            Picasso.get().load(photo).into(holder.view.image2)
    }

ссылка на библиотеку: https://github.com/Arasthel/SpannedGridLayoutManager

1 Ответ

0 голосов
/ 24 октября 2019

Если вы используете эту библиотеку только для разнесения между элементами в GridRecyclerView, используйте следующий код:

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;

public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
    this.spanCount = spanCount;
    this.spacing = spacing;
    this.includeEdge = includeEdge;
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    int position = parent.getChildAdapterPosition(view); // item position
    int column = position % spanCount; // item column

    if (includeEdge) {
        outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
        outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

        if (position < spanCount) { // top edge
            outRect.top = spacing;
        }
        outRect.bottom = spacing; // item bottom
    } else {
        outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
        outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
        if (position >= spanCount) {
            outRect.top = spacing; // item top
        }
    }
}

}

recyclerView.addItemDecoration(new GridSpacingItemDecoration(SPAN_COUNT,
            SPACING_IN_PX, true));

, если количество элементов в строке отличается, а затем перейти к FlexBoxLayout от Google. Избегайте использования сторонних библиотек от разработчиков, которые не поддерживают его должным образом.

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