Скажем, XML-макет для моей деятельности выглядит следующим образом. В приведенном ниже XML-коде жестко задано значение для атрибута, но я хочу передать значение из действия при настройке представления содержимого.
<myView
android:id = "@+id/myView
....
app:myAttriute = "someMode"/>
Представление считывает это значение в конструкторе, как показано ниже, и устанавливает начальный режим.
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
{
val inflater = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
inflater.inflate(R.layout.myView, this);
var arr = context.obtainStyledAttributes(attrs, R.styleable.myView);
var mode = arr.getString(R.styleable.myAttribute);
Можно ли установить этот атрибут в упражнении, чтобы его можно было использовать в конструкторе представления? Это может звучать странно, это вызывает некоторые проблемы при смене режима после конструктора представления, например:
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myView = findView...
myView.myAttribute = "someMode";
Если возможно, я бы хотел как-то передать атрибут его конструктору.
super.onCreate(savedInstanceState)
//takes the view's ID and attribute name/value to be used while
//setting the content view (passed to myView's constructor)
hypotheticalMethod(R.id.myView, "myAttriute", "someMode");
setContentView(R.layout.activity_main)