Я не совсем уверен, но, похоже, у вас проблемы как с аспектом SQL, так и с представлением классов ваших данных.
Если вы точно знаете, что будет только определенное количество правил, вы можете подойти к нему так, как в настоящее время. Кроме того, я бы сделал функцию 'getter' для списка правил, т.е.
List<String> get rules => [rule1, rule2, rule2, ...].where((item) => item != null).toList()
Обратите внимание, что если бы вы использовали конструктор, вы могли бы вместо этого построить список в конструкторе следующим образом:
class Friend {
int id;
String name;
String pic;
bool play;
String rule0;
String rule1;
String rule2;
String rule3;
String rule4;
String rule5;
String rule6;
String rule7;
String rule8;
String rule9;
List<String> rules;
Friend(
{this.id,
this.name,
this.pic,
this.play,
this.rule0,
this.rule1,
this.rule2,
this.rule3,
this.rule4,
this.rule5,
this.rule6,
this.rule7,
this.rule8,
this.rule9})
: rules = [
rule0,
rule1,
rule2,
rule3,
rule4,
rule5,
rule6,
rule7,
rule8,
rule9,
].where((item) => item != null).toList(growable: false);
}
Я бы не рекомендовал этого (или если вы это сделаете, вы вероятно, следует сделать либо правило *, либо правила частным, либо каким-либо образом поддерживать состояние). В списке строк хранятся ссылки не на строки rule0, rule1, ..., а на сами строки. Вы можете обойти это, сделав класс Rule и сделав final0-9 final, но это становится немного сложнее.
Скорее всего, имеет смысл иметь динамический список элементов. SQL не справляется с этим, поэтому вам придется создать отдельную таблицу для правил.
У вас будет две таблицы, примерно такие, где id
- это ПЕРВИЧНЫЕ КЛЮЧИ, а friendId
- ИНОСТРАННЫЙ КЛЮЧ:
Friend(id, name, pic, play)
и Rule(id, friendId, text)
Сохранение и обновление станет более сложным сейчас. Вы должны быть более осторожны с ведением списка правил в базе данных, но это не так уж сложно. Если вы знаете, что будете писать в список только из одного места (то есть из одного класса), вы можете сохранить разницу между текущим состоянием класса и начальным состоянием, но реально, если вы не имеете дело с десятками тысяч правил, это, вероятно, не будет иметь значительного значения.
Если Вы используете Ограничительное Расположение , можно установить любое представление в нем, для заполнения процента экрана с:
layout_constraintWidth_percent = "0.8"
Так, например, если у Вас есть ScrollView в диалоговом окне и Вы хотите установить его на процент экранной высоты. Это было бы похоже на это:
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintHeight_percent="0.8">
Hope это помогает кому-то!!
Установите android:minWidth
и android:minHeight
в вашем пользовательском представлении xml. Они могут заставить оповещение не просто обернуть размер содержимого.
Использование такого представления должно сделать это:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="300dp"
android:minHeight="400dp">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/icon"/>
</LinearLayout>