У меня ListView заполнен несколькими кнопками ToggleButton. Мне нужно, чтобы список был таким, что если количество переключаемых кнопок = 3, то никакие другие кнопки, кроме этих переключаемых, не могут быть включены или выключены / сфокусированы / нажаты. Кроме того, если один из трех переключателей нажимается снова, это позволяет любой другой переключаемой кнопке снова переключаться. Я немного новичок, и я не мог понять, как применять SparseBooleanArrays, list.getCheckedItemCount и т. Д. c, поэтому мне нужна помощь.
Опять же:
- список из 9 кнопок переключения, если быть точным.
- 3 может быть переключено в любой момент времени.
- Если переключено три, можно отключить только эти 3, а остальные не могут быть сфокусированы.
- Если один из этих 3 впоследствии отключен, все остальные теперь могут включаться или выключаться, пока 3 не переключатся снова.
Понятия не имею, как go об этом. Я понимаю идею, но необходимый код ускользает от меня.
Код
Адаптер массива
int orientationCount = 0;
private Context mContext;
int mResource;
public orientation_adapter(@NonNull Context context, int resource, @NonNull ArrayList<orientation_item> objects) {
super(context, resource, objects);
this.mContext = context;
this.mResource = resource;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final String orientation = getItem(position).getOrientation();
orientation_item user_orientation = new orientation_item(orientation);
LayoutInflater inflator = LayoutInflater.from(mContext);
convertView = inflator.inflate(mResource, parent, false);
final TextView orientation_type = (TextView) convertView.findViewById(R.id.orientation_type);
orientation_type.setTag(position);
String pos = String.valueOf(position);
orientation_type.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String orientationStr = getItem(position).getOrientation();
orientation_type.setText(orientationStr);
isChecked = ((ToggleButton)v).isChecked();
if(isChecked){
orientationCount = orientationCount + 1;
String num = String.valueOf(orientationCount);
//Toast.makeText(mContext, num, Toast.LENGTH_SHORT).show();
} else {
orientationCount = orientationCount - 1;
String num = String.valueOf(orientationCount);
//Toast.makeText(mContext, num, Toast.LENGTH_SHORT).show();
}
}
});
orientation_type.setText(orientation);
return convertView;
}
Как вы видите, я нашел способ отслеживать количество проверенных элементов. У меня также есть оператор переключения логических значений, который отслеживает, какие именно элементы c проверены, но я не могу управлять ими как группой, поскольку getView применяется только к одному конкретному элементу, а не к набору всех переключаемых кнопок, которые еще не нажал.
Основная деятельность
myList = (ListView)findViewById(R.id.myList);
list = new ArrayList<>();
//items added
adapter = new orientation_adapter(ChooseOrientation.this, R.layout.orientation_unit, list);
myList.setAdapter(adapter);