Управление списком кнопок-переключателей в задаче просмотра списка - Android Studio - PullRequest
0 голосов
/ 16 апреля 2020

У меня ListView заполнен несколькими кнопками ToggleButton. Мне нужно, чтобы список был таким, что если количество переключаемых кнопок = 3, то никакие другие кнопки, кроме этих переключаемых, не могут быть включены или выключены / сфокусированы / нажаты. Кроме того, если один из трех переключателей нажимается снова, это позволяет любой другой переключаемой кнопке снова переключаться. Я немного новичок, и я не мог понять, как применять SparseBooleanArrays, list.getCheckedItemCount и т. Д. c, поэтому мне нужна помощь.

Опять же:

  1. список из 9 кнопок переключения, если быть точным.
  2. 3 может быть переключено в любой момент времени.
  3. Если переключено три, можно отключить только эти 3, а остальные не могут быть сфокусированы.
  4. Если один из этих 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...