Изменить ограничение ограничения в соответствии со списком - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть ряд кнопок, которые я хочу изменить в соответствии со значением, полученным из sharedpreferences.Значение изменяется и прослушивается правильно, но в макете все равно ничего не происходит, поэтому ошибка должна быть где-то в классе, который я использую для установки списка, или во фрагменте, где я устанавливаю ограничения.Это класс:

class ButtonPosLists(context: Context) {

var mContext: Context = context

val view = inflate(mContext, R.layout.fragment_level, null)
val dobutton = view.findViewById<AppCompatButton>(R.id.dobutton)
val dirabutton = view.findViewById<AppCompatButton>(R.id.dirabutton)
val rebutton = view.findViewById<AppCompatButton>(R.id.rebutton)
val rimebutton = view.findViewById<AppCompatButton>(R.id.rimebutton)
val mibutton = view.findViewById<AppCompatButton>(R.id.mibutton)
val fabutton = view.findViewById<AppCompatButton>(R.id.fabutton)
val fisebutton = view.findViewById<AppCompatButton>(R.id.fisebutton)
val sobutton = view.findViewById<AppCompatButton>(R.id.sobutton)
val silebutton = view.findViewById<AppCompatButton>(R.id.silebutton)
val labutton = view.findViewById<AppCompatButton>(R.id.labutton)
val litabutton = view.findViewById<AppCompatButton>(R.id.litabutton)
val tibutton = view.findViewById<AppCompatButton>(R.id.tibutton)

val c = listOf(dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton, labutton, litabutton, tibutton)
val db = listOf(dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton, labutton, litabutton, tibutton, dobutton)
val d = listOf(rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton, labutton, litabutton, tibutton, dobutton, dirabutton)
val eb = listOf(rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton, labutton, litabutton, tibutton, dobutton, dirabutton, rebutton)
val e = listOf(mibutton, fabutton, fisebutton, sobutton, silebutton, labutton, litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton)
val f = listOf(fabutton, fisebutton, sobutton, silebutton, labutton, litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton)
val gb = listOf(fisebutton, sobutton, silebutton, labutton, litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton)
val g = listOf(sobutton, silebutton, labutton, litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton)
val ab = listOf(silebutton, labutton, litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton)
val a = listOf(labutton, litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton)
val bb = listOf(litabutton, tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton, labutton)
val b = listOf(tibutton, dobutton, dirabutton, rebutton, rimebutton, mibutton, fabutton, fisebutton, sobutton, silebutton, labutton, litabutton)

var posList = bb

fun makePosition(posString: String?) {
when(posString) {
    "c" -> {
        posList = c
    }
    "db" -> {
        posList = db
    }
    "d" -> {
        posList = d
    }
    "eb" -> {
        posList = eb
    }
    "e" -> {
        posList = e
    }
    "f" -> {
        posList = f
    }
    "gb" -> {
        posList = gb
    }
    "g" -> {
        posList = g
    }
    "ab" -> {
        posList = ab
    }
    "a" -> {
        posList = a
    }
    "bb" -> {
        posList = bb
    }
    "b" -> {
        posList = b
    }
}
println(posList[7].toString())
}
}

И во фрагменте, к которому я хочу применить эти списки, я использую это:

fun setPositions() {
    val params = FullscreenActivity.buttonPos.posList[0].layoutParams as ConstraintLayout.LayoutParams
    val params1 = FullscreenActivity.buttonPos.posList[1].layoutParams as ConstraintLayout.LayoutParams
    val params2 = FullscreenActivity.buttonPos.posList[2].layoutParams as ConstraintLayout.LayoutParams
    val params3 = FullscreenActivity.buttonPos.posList[3].layoutParams as ConstraintLayout.LayoutParams
    val params4 = FullscreenActivity.buttonPos.posList[4].layoutParams as ConstraintLayout.LayoutParams
    val params5 = FullscreenActivity.buttonPos.posList[5].layoutParams as ConstraintLayout.LayoutParams
    val params6 = FullscreenActivity.buttonPos.posList[6].layoutParams as ConstraintLayout.LayoutParams
    val params7 = FullscreenActivity.buttonPos.posList[7].layoutParams as ConstraintLayout.LayoutParams
    val params8 = FullscreenActivity.buttonPos.posList[8].layoutParams as ConstraintLayout.LayoutParams
    val params9 = FullscreenActivity.buttonPos.posList[9].layoutParams as ConstraintLayout.LayoutParams
    val params10 = FullscreenActivity.buttonPos.posList[10].layoutParams as ConstraintLayout.LayoutParams
    val params11 = FullscreenActivity.buttonPos.posList[11].layoutParams as ConstraintLayout.LayoutParams

    params.topToTop = guideline8.id
    params.endToStart = guideline1.id
    params.startToStart = container.id
    params.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[0].requestLayout()

    params1.topToTop = guideline9.id
    params1.endToStart = guideline13.id
    params1.startToStart = guideline12.id
    params1.bottomToTop = guideline8.id
    FullscreenActivity.buttonPos.posList[1].requestLayout()

    params2.topToTop = guideline8.id
    params2.endToStart = guideline2.id
    params2.startToStart = guideline1.id
    params2.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[2].requestLayout()

    params3.topToTop = guideline9.id
    params3.endToStart = guideline14.id
    params3.startToStart = guideline13.id
    params3.bottomToTop = guideline8.id
    FullscreenActivity.buttonPos.posList[3].requestLayout()

    params4.topToTop = guideline8.id
    params4.endToStart = guideline3.id
    params4.startToStart = guideline2.id
    params4.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[4].requestLayout()

    params5.topToTop = guideline8.id
    params5.endToStart = guideline4.id
    params5.startToStart = guideline3.id
    params5.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[5].requestLayout()

    params6.topToTop = guideline9.id
    params6.endToStart = guideline16.id
    params6.startToStart = guideline15.id
    params6.bottomToTop = guideline8.id
    FullscreenActivity.buttonPos.posList[6].requestLayout()

    params7.topToTop = guideline8.id
    params7.endToStart = guideline5.id
    params7.startToStart = guideline4.id
    params7.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[7].requestLayout()

    params8.topToTop = guideline9.id
    params8.endToStart = guideline17.id
    params8.startToStart = guideline16.id
    params8.bottomToTop = guideline8.id
    FullscreenActivity.buttonPos.posList[8].requestLayout()

    params9.topToTop = guideline8.id
    params9.endToStart = guideline6.id
    params9.startToStart = guideline5.id
    params9.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[9].requestLayout()

    params10.topToTop = guideline9.id
    params10.endToStart = guideline18.id
    params10.startToStart = guideline17.id
    params10.bottomToTop = guideline8.id
    FullscreenActivity.buttonPos.posList[10].requestLayout()

    params11.topToTop = guideline8.id
    params11.endToEnd = container.id
    params11.startToStart = guideline6.id
    params11.bottomToTop = guideline7.id
    FullscreenActivity.buttonPos.posList[11].requestLayout()
}

Есть идеи, где я ошибаюсь?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вы должны использовать ConstraintSet вместо ConstraintLayout.LayoutParams.По документации ConstraintLayout.LayoutParams.( Курсив мой.)

Этот класс содержит различные атрибуты, определяющие, как представление должно быть расположено внутри ConstraintLayout. Для создания ограничений во время выполнения рекомендуется использовать ConstraintSet.

0 голосов
/ 18 февраля 2019

Вы изменяете атрибуты макета после их надувания, дальнейшие изменения не будут автоматически применяться к существующему макету.Попробуйте использовать invalidate () для запуска метода onDraw вашего верхнего макета после применения новых параметров макета.

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