Таргетинг на конкретный флажок с тегом в просмотре списка - PullRequest
0 голосов
/ 27 мая 2011

В моем приложении у меня есть список со строками, каждая из которых содержит изображение, текст и флажок. Я переопределил метод getView моего простого адаптера, чтобы включить тег для каждого флажка в зависимости от его положения в строке (код здесь http://www.heypasteit.com/clip/YME ... bs и bs1 - логические значения). Таким образом, я мог сказать, какой флажок изменялся при вызове onCheckedChanged. Однако мне нужно вручную установить состояние отдельных флажков. Например, установите для флажка «3» (флажок в строке 3) значение «true».

Любая помощь по этому вопросу будет высоко ценится!

1 Ответ

0 голосов
/ 27 мая 2011

Вы можете заменить свой подход массивом логических значений.Например, если у вас есть 15 элементов в массиве, вы можете создать логическое значение [15] и изменить состояние различных позиций, когда пользователь нажимает флажок, а также установить начальное состояние в начале.

Не идеальный пример, но я надеюсь, что вы поймете идею:

public class YourActivity extends Activity {

protected boolean[] checkStates;

protected void onCreate(android.os.Bundle savedInstanceState) {
    //... Some of your code where you get a list of you objects
    checkStates = new boolean[list.size()];
    // As an example, let's check some of them:
    checkStates[3] = true;
    checkStates[7] = true;
    //.. Something more
};

SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.rowsecond, new String[] {"icon", "name"}, new int[] {R.id.image1, R.id.text1}) {
    public View getView(int position, View convertView, ViewGroup parent) {
        final View v = super.getView(position, convertView, parent);
        boxer = (CheckBox)v.findViewById(R.id.checkbox);
        boxer.setTag(position);
        boxer.setOnCheckedChangeListener(checkedChangeListener);
        boxer.setChecked(checkStates[position]);
        return v;
    }

    private final OnCheckedChangeListener checkedChangeListener = new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
            final Integer position = (Integer) buttonView.getTag();
            checkStates[position] = isChecked;
        }
    };
};

}

Не забудьте вызвать yourAdapterInstance.notifyDataSetChanged (), если выпытаемся обновить состояния флажков извне проверкиChangeListener и после начального метода onCreate ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...