我有一排按钮要根据来自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()
}
知道我哪里出错了吗?
答案 0 :(得分:1)
您要在对布局属性进行膨胀之后对其进行更改,否则进一步的更改将不会自动应用于现有布局。在应用新的布局参数之后,尝试使用invalidate()来触发顶部布局的onDraw方法。
答案 1 :(得分:1)
您应该使用ConstraintSet
而不是ConstraintLayout.LayoutParams
。根据{{1}}的文档。 (斜体是我的。)
此类包含不同的属性,这些属性指定如何在ConstraintLayout内布局视图。 要在运行时建立约束,建议使用ConstraintSet。