Как снять/снять отметку со всех кнопок-флажков, когда одна из них выбрана?

У меня есть переключатель, установленный в моем java-коде для кнопки в xml. Код выглядит следующим образом:

@Override
    public void onClick(final View view) {
        switch (view.getId()) {
        case R.id.selectable_text:
            if(view instanceof CheckedTextView){
                CategoryCheckableRow checkableRow = ((CheckedTextView)view).getCategoryCheckableRow();
                toggleCategoryRow(view, checkableRow);
                Log.d("newsdash","I am toggling in dash onclick");
                if (!mCategoriesSet.add(checkableRow)) {
                    mCategoriesSet.remove(checkableRow);
                }
                mDoneButton.setEnabled(!mCategoriesSet.isEmpty());
            }
            return;
        case R.id.button_done:
            sendCategoriesToActivity();
            ((DashboardManageNewsCategoriesActivity) getActivity()).updateCategoriesMap(mCategoriesSet);
            break;
        default:
        }

}

Я планирую снять все остальные «галочки», когда установлен мой текущий флажок. скажем, у меня есть флажки 1, 2 и 3, если я отмечу 1, я хочу, чтобы 2 и 3 были сняты, и так далее. Есть ли способ добиться этого с помощью моего кода выше? Скажем (если курсор (или, возможно, представление). getcursor или currentposition) = выбран текущий флажок) {снимите все остальные флажки, кроме текущего}?

Также вот строка переключения:

private void toggleCategoryRow(final View view, final CategoryCheckableRow checkableRow) {
        final CheckedTextView textView = (CheckedTextView) view;
        textView.toggle();
        checkableRow.setSelected(textView.isChecked());
    }

Вот соответствующий XML-файл (для справки):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/altercolor2"
    android:orientation="vertical">
  <ScrollView 
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/altercolor2"
        android:orientation="vertical" >



        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">


            <Button
                android:id="@+id/button_top_news"
                android:layout_width="match_parent"
                android:layout_height="@dimen/manage_news_btn_ht"
                android:layout_marginLeft="2dp"
                android:layout_marginRight="2dp"
                android:background="@drawable/manage_market_category_btnbg"
                android:gravity="left|center_vertical"
                android:paddingLeft="10dp"
                android:drawablePadding="10dp"
                android:text="@string/button_top_news"
                android:textColor="#cccccc"
                android:textSize="@dimen/title" 
                android:drawableLeft="@drawable/arrow_expand_collapse"/>




        </RelativeLayout>
</linearlayout>
</,... etc

person Community    schedule 09.04.2014    source источник
comment
Есть ли причина, по которой вы не используете RadioGroup, поскольку это ожидаемая функциональность от него, а не от Checkbox?   -  person codeMagic    schedule 09.04.2014
comment
Причина, по которой я не использую радиогруппу, заключается в том, что у меня есть отдельные категории вещей со своими подкатегориями, поэтому мне трудно их поддерживать, кроме того, я никогда не использовал их раньше.   -  person    schedule 09.04.2014
comment
Было бы неплохо начать. Когда пользователь видит флажки, обычно он ожидает, что сможет установить несколько флажков. Когда они видят радиогруппу, они часто знают, что могут выбрать только одну, и выбор одной из них снимет отметку с других. Это действительно сделало бы вашу жизнь проще и приятнее для ваших пользователей.   -  person codeMagic    schedule 09.04.2014
comment
можете ли вы показать пример в отношении моего кода? я разместил свой xml   -  person    schedule 09.04.2014
comment
Вот пример xml   -  person codeMagic    schedule 09.04.2014
comment
Вот достойный пример в документации   -  person codeMagic    schedule 09.04.2014
comment
это выглядит аккуратно, но я хочу, чтобы мои категории были кнопками, просто динамические флажки нужно превратить в переключатели, любая идея, как это сделать программно   -  person    schedule 09.04.2014
comment
К тому же RadioGroup лучше подходит к вашей аватарке   -  person Emmanuel    schedule 09.04.2014
comment
@ Эммануэль, как дела? ха-ха   -  person    schedule 09.04.2014
comment
Все, что связано с Radio и фотографиями в стиле Бибери, сочетается   -  person Emmanuel    schedule 09.04.2014
comment
Изменяется ли что-то, что они должны быть динамичными? Создать его в xml намного проще   -  person codeMagic    schedule 09.04.2014
comment
@Emmanuel Эта фотка старше Бибера, ха-ха, мне было около 20 лет, сейчас 27, он скопировал мой стиль, ха-ха   -  person    schedule 09.04.2014
comment
@codeMagic Я создал их такими же динамичными, как я извлекаю данные из базы данных. Кроме того, в других представлениях с общими классами разрешены множественные проверки, поэтому я хотел сохранить их согласованность, нет ли другого способа распознать текущую позицию щелчка и снять все остальные чеки?   -  person    schedule 09.04.2014
comment
Можно, но это только кажется плохим. Вы можете поместить свои флажки в массив, и когда один из них отмечен, вы выполняете итерацию и снимаете флажки с других.   -  person codeMagic    schedule 09.04.2014
comment
@codeMagic, все должно быть в порядке, просто пытаюсь обойти это, было бы неплохо изучить текущую позицию, можете ли вы объяснить это с помощью кода, если вы имеете представление об этом?   -  person    schedule 09.04.2014
comment
Я разместил ответ. Посмотрите, есть ли в этом смысл. Я просто написал это быстро, поэтому вам может понадобиться настроить некоторые переменные, но это должно дать вам представление о том, что я имею в виду.   -  person codeMagic    schedule 09.04.2014


Ответы (1)


Я не уверен, где вы инициализируете свой CheckBoxes, поэтому я не совсем уверен, куда вы его поместите. Но когда вы их создаете, просто добавьте их в ArrayList лайк

//initialize an ArrayList
ArrayList<CheckBox> checkArray = new ArrayList<CheckBox>();
// then add your checkboxes to the list
checkArray.add(aCheckBox);

затем в вашем событии клика

for(i=0; i<checkArray.size(); i++)
{
    if (checkArray.get(i) != (CheckBox)v)  // assuming v is the View param passed in
       checkArray.get(i).setChecked(false);
}

Это можно было бы написать лучше, но я не уверен, как выглядит остальная часть вашего кода, поэтому это должно дать вам представление.

person codeMagic    schedule 09.04.2014
comment
Это часть моего вопроса здесь: stackoverflow.com/questions/22964603/ у него есть некоторые код подробно, если это имеет смысл - person ; 09.04.2014
comment
Я не знаю, что бы вы получили текущее положение? ок, попробую глянуть - person codeMagic; 09.04.2014
comment
Спасибо! Кроме того, я внес ваши изменения в базовый класс, где я его использую, и добавил код к этому вопросу для получения дополнительной информации. - person ; 09.04.2014