Выполните итерацию по списку в Android, чтобы сделать флажки видимыми перед каждым элементом - PullRequest
0 голосов
/ 10 ноября 2011

Для начала я использовал учебный код Android Notepad.В моем notes_row.xml у меня есть текстовое представление для отображения заголовка заметки и флажок, который изначально скрыт андроидом: visibility = "ушел"

Я хочу, чтобы, когда пользователь открыл меню опций и нажал наОтметьте, флажки перед каждым элементом в списке должны стать видимыми.Однако, когда я нажимаю на Пометить в эмуляторе, флажок только первой заметки становится видимым.Итак, я хочу перебрать весь список и setVisibility (0), чтобы все флажки были видны.Я новичок, поэтому, пожалуйста, ответьте подробно.Заранее спасибо.

Мой фрагмент кода:

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
    case INSERT_ID:
        createNote();
        return true;
    case MARK_ID:
                // only first item check box appears with following 2 lines:
                    CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
                    checkBox.setVisibility(0);

                /* tried the following, but no chekbox appears with this:   
        Cursor c = mDbHelper.fetchAllNotes();
        c.moveToPosition(0);
        while(c.isAfterLast()){
            CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
            checkBox.setVisibility(0);
            c.moveToNext();
        }
                 */
        return true;
}

Мой новый код после прочтения ответов, по-прежнему отображается только флажок первого элемента:

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
    case INSERT_ID:
        createNote();
        return true;
    case MARK_ID:
        CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
        String[] lvItems = new String[]{NotesDbAdapter.KEY_TITLE};
        MyAdapter arrAdapter = new MyAdapter(this, android.R.layout.simple_list_item_multiple_choice, lvItems);
        arrAdapter.toggleCheckBoxVisibility(checkBox);
        arrAdapter.notifyDataSetChanged();
                    return true;
    return super.onMenuItemSelected(featureId, item);
             }

Вот мой адаптер:

private class MyAdapter extends ArrayAdapter<String>{

    public MyAdapter(Context context, int textViewResourceId,
            String[] objects) {
        super(context, textViewResourceId, objects);
        // TODO Auto-generated constructor stub
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.notes_row, parent, false);
        //String[] from = new String[]{NotesDbAdapter.KEY_TITLE};
        return row;
        //return super.getView(position, convertView, parent);
    }

    public boolean toggleCheckBoxVisibility(CheckBox checkBox){
        checkBox.setVisibility(0);
        super.notifyDataSetChanged();
        return true;
    }

}

Ответы [ 3 ]

0 голосов
/ 10 ноября 2011

В вашем адаптере создайте метод для установки логического флага для видимости. При нажатии кнопки вызовите метод и установите флаг в значение true. Затем используйте notifyDataSetChanged() для обновления вашего списка. В вашем методе getView вы можете установить видимость вашего флажка на значение в логическом флаге.

0 голосов
/ 10 ноября 2011

Попробуйте это: В вашем классе напишите этот код:

@Override
protected void onStart() {
    super.onStart();

    ArrayAdapter<String> araAdapter=new ArrayAdapter<String>(getApplicationContext(),             

    android.R.layout.simple_list_item_multiple_choice, xmlList);
    listView_xml.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    listView_xml.setAdapter(araAdapter);
}

xmlList - это то, что сохраняются данные или ваш массив string []. listview_xml - это имя вашего списка. Пройдите этот урок, используя несколько флажков

0 голосов
/ 10 ноября 2011
  1. Возьмите свой адаптер списка
  2. Итерируйте по представлениям элементов списка, используя getView (или аналогичный)
  3. Для каждого вида, который вы выбираете, выполните v.setVisibility (View.VISIBLE)

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

РЕДАКТИРОВАТЬ: более конкретно: в вашей основной теме деятельности

MyAdapter a= (MyAdapter) this.getArrayAdapter(); 
//count how many views you have to iterate and build a for loop accordingly
for(...){
    View v = a.getView(/*based on the for index position */).setVisibility(View.VISIBLE) 
//Do something else with the view if you want...

ЭтоРешение предполагает, что вы уже создали и связали с вашей деятельностью адаптер массива.

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