Я не совсем уверен, является ли это изящным решением проблемы, указанной в вашем вопросе.Однако после проверки желаемого пользовательского интерфейса и вашего комментария позже, я думаю, что есть обходной путь, который включает меньше проблем.
Я хотел бы предложить оставить три флажка (так как три - это максимальный предел флажков, которые может иметь строка) в вашей структуре строк.Таким образом, окончательная компоновка каждой строки должна выглядеть следующим образом.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
android:layout_gravity="center"
android:layout_margin="20dp"/>
<TextView
android:id="@+id/nameLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_margin="20dp"
android:text="Name"
android:layout_weight="1" />
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_gravity="right|center"
android:gravity="right|center" />
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_gravity="right|center"
android:gravity="right|center" />
<CheckBox
android:id="@+id/checkbox3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_gravity="right|center"
android:gravity="right|center" />
</LinearLayout>
Класс DataHolder
внутри вашего адаптера должен выглядеть следующим образом.
public class DataHolder{
ImageView imageView;
TextView textView;
CheckBox cb1;
CheckBox cb2;
CheckBox cb3;
RelativeLayout rl;
}
Затем в вашей функции getView
используйте три разных ссылки.
holder.cb1 = (CheckBox) convertView.findViewById(R.id.checkbox1);
holder.cb2 = (CheckBox) convertView.findViewById(R.id.checkbox2);
holder.cb3 = (CheckBox) convertView.findViewById(R.id.checkbox3);
Затем измените регистр переключателя, как показано ниже.
int numCheckBox = item.numCheckBox;
if(numCheckBox == 1) {
cb1.setVisibility(View.VISIBLE);
cb2.setVisibility(View.GONE);
cb3.setVisibility(View.GONE);
} else if(numCheckBox == 2) {
cb1.setVisibility(View.VISIBLE);
cb2.setVisibility(View.VISIBLE);
cb3.setVisibility(View.GONE);
} else if(numCheckBox == 3) {
cb1.setVisibility(View.VISIBLE);
cb2.setVisibility(View.VISIBLE);
cb3.setVisibility(View.VISIBLE);
}
Как только элементы заполнены правильно, вы можете получить соответствующие действия для этих элементов-флажков.
Надеюсь, вы поняли идею.Пожалуйста, дайте мне знать, если есть что-то еще, чем я могу вам помочь.
Редактировать:
Вам не нужно проходить через чекбоксы, поскольку вы можете явно установить onCheckedChangeListener
для каждого изВаш флажок, который будет сохранять нужные значения в SQLite.Невидимый флажок не будет влиять на их слушателя.Надеюсь, это поможет!