У меня есть два класса:
- RateBottomSheet (это имеет собственный макет)
- CustomRateBar (это пользовательский элемент)
Я хочууправлять видимостью некоторых элементов RateBottomSheetLayout из класса CustomRateBar. Я попытался создать экземпляр класса 1 в 2. Но не привел. У кого-нибудь есть идея? Я думал в слушателе. Но какой должен быть параметр? вид? У кого-нибудь есть какой-нибудь пример?
Класс RateBottomSheet:
´class RateBottomSheet : BottomSheetDialogFragment(){
fun events() {
imgEmoji.visible()
feeling.visible()
title.gone()
subtitle.gone()
txtOpinion.visible()
btnSubmit.visible()
}
private var fragmentView: View? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
fragmentView = inflater.inflate(R.layout.score_bottom_sheet, container, false)
doBounceAnimation(this.fragmentView)
return fragmentView
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NORMAL, R.style.SheetDialog)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
customRB.init(5, context!!)
}
} ´
Класс CustomRatingBar:
´class CustomRatingBar : LinearLayout {
var vChildrens: MutableList<View>? = null
var mContext = context
var size: Int? = null
constructor(
context: Context?,
onSelectedStar: IOnSelectedStar
) : super(context) {
this.onSelectedStar = onSelectedStar
}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
fun init(item: Int, context: Context) {
this.size = item
this.mContext = context
populate()
}
fun populate() {
vChildrens = ArrayList()
val lp = LayoutParams(
(FrameLayout.LayoutParams.MATCH_PARENT),
(FrameLayout.LayoutParams.WRAP_CONTENT)
)
var vChildren: View
for (item in 1..size!!) {
vChildren = buildStars(item)
vChildren.layoutParams = lp
this.addView(vChildren)
vChildrens!!.add(vChildren)
}
this.requestLayout()
}
fun buildStars(num: Int): View {
val item = LayoutInflater.from(context).inflate(R.layout.item_ratingbar, null)
item.tag = num
var viewHolder = ViewHolder(view = item)
val unSelectedColor = PorterDuffColorFilter(
ContextCompat.getColor(
context,
R.color.btn_specialities_background
), PorterDuff.Mode.SRC_IN
)
viewHolder.starItem.colorFilter = unSelectedColor
viewHolder.starItem.setOnClickListener {
LogUtils().v("selectOn old", " ${selectOn}")
for (u in 0 until vChildrens!!.size) {
val vChildrenn: View = vChildrens!![u]
viewHolder = ViewHolder(view = vChildrenn)
LogUtils().v("item", " ${item.tag.toString().toInt()}")
if (item.tag.toString().toInt() < selectOn || item.tag.toString().toInt() > selectOn && first ) {
**here I want to call the class event of the another class**
}
if (vChildrenn.tag.toString().toInt() <= item.tag.toString().toInt()) {
val selectedColor = PorterDuffColorFilter(
ContextCompat.getColor(
context,
R.color.star_color
), PorterDuff.Mode.SRC_IN
)
viewHolder.starItem.colorFilter = selectedColor
} else {
viewHolder.starItem.colorFilter = unSelectedColor
}
}
return item
}
inner class ViewHolder(view: View) {
var starItem = view.findViewById<View>(R.id.starItem) as ImageButton
}
} ´