Студия Android обрабатывает несколько пользователей. Как я могу изменить интерактивный параметр макета? - PullRequest
0 голосов
/ 23 октября 2019

Я начинающий разработчик, разрабатывающий приложение для разметки другого пользователя. В этом приложении есть два типа пользователей: один может читать свойства, а другой - читать и записывать свойства.

Мне нужно добавить несколько строк динамически в основной макет, и для этого я использую процедуру надувания.

здесь макет строки:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/row"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:onClick="sendMessage">

....
</androidx.constraintlayout.widget.ConstraintLayout>

Теперь я хочуизмените свойство clickable на true / false в зависимости от типа пользователя. (если пользователь является пользователем с правами на запись, он может щелкнуть макет, чтобы начать новое действие и изменить свойства объектов строки). Обратите внимание, что я хочу использовать одно действие для работы с обоими пользователями, потому что в общем случае мне нужно изменить только несколько свойств, таких как 3 интерактивных свойства и 3 видимых свойства. Поэтому я записал эти строки в string.xml:

<string name="user_0_clickable">false</string>
<string name="user_1_clickable">true</string>

И я хочу динамически добавлять строки и изменять их свойство clickable в зависимости от строки «user_0_clickable» или «user_1_clickable» (передаваемой намерением послеавторизоваться). Возможно ли это? И это лучший способ для моей области, если мне нужно изменить очень мало свойств?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Ваш User объект будет иметь какое-то поле, например userType или readWriteType, с каким-либо логическим или целочисленным значением, например 0 или 1. Так, в вашем Activity или Fragment или в ViewHolder из Adapter (если вы используете RecyclerView), где вы в основном устанавливаете данные (что-то вроде textView.setText("user.getName()); и т. д.), просто сделайте это: swich(user.getUserType()) (или введите switch(user.getReadWriteType()), в любом поле, которое вы используетечтобы указать состояние чтения или записи User), а затем: case userWrite: whateverTextField.setEditable(true); whateverButton.setClickable(true); break; и затем продолжить.
Я не думаю, что вам нужно использовать поля string.xml с user_0_clickable.
Вам не нужно динамически раздувать какой-либо компонент, просто заранее поместите все компоненты в макет XML и просто назначьте textFields как недоступные для редактирования, а кнопки - как невидимые или не нажимаемые в соответствии с вашими требованиями.

1 голос
/ 23 октября 2019

Само представление будет иметь интерактивное состояние, поэтому в Kotlin:

view.isClickable = false

или в Java:

view.setClickable(false);

Основано на логике для активного пользователя.

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