Добавить элементы в listview arrayadapter

Интерфейс, диалоги, темы, стили, меню
Ответить
Fedya
Сообщения: 4
Зарегистрирован: 04 сен 2014, 17:15

Добавить элементы в listview arrayadapter

Сообщение Fedya » 04 сен 2014, 17:50

Здравствуйте.

Скажите, пожалуйста, как добавить элементы к listview?

MyActivity:

Код: Выделить всё

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView listView = (ListView) findViewById(R.id.listView);

        String[] ListId1 = {"1", "2", "3"};
        String[] ListText1 = {"Первый", "Второй", "Третий"};

        CustomAdapter adapter = new CustomAdapter(this, ListId1 , ListText1);

        adapter.setCustomListener(new ListViewListener() {
            public void onClick(String text) {
                Log.d("TEST", text);
            }
        });

        listView.setAdapter(adapter);


        final Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                button.setVisibility(View.GONE);

                String[] ListId2 = {"4", "5", "6"};
                String[] ListText2 = {"Четвертый", "Пятый", "Шестой"};

                // Тут нужно как-то добавить их в listview

            }
        });
    }
}
ListViewListener:

Код: Выделить всё

public interface ListViewListener {
    public void onClick(String text);
}
CustomAdapter:

Код: Выделить всё

public class CustomAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] id;
    private final String[] text;
    private ListViewListener micl;

    public CustomAdapter(Context context, String[] id, String[] text) {
        super(context, R.layout.list, id);
        this.context = context;
        this.id = id;
        this.text = text;
    }

    public void setCustomListener(ListViewListener micl) {
        this.micl = micl;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list, parent, false);

        final TextView textView = (TextView) rowView.findViewById(R.id.textView);
        textView.setText(text[position]);

        final int pos = position;
        rowView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (micl != null) {
                    micl.onClick(text[pos]);
                }
            }
        });

        return rowView;
    }
}
Если бы был стандартный adapter, то там просто добавить

Код: Выделить всё

notifyDatasetChanged()
а тут как?

Сделал маленький пример:
myapp2.zip
(134.43 КБ) 129 скачиваний

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Добавить элементы в listview arrayadapter

Сообщение anber » 04 сен 2014, 19:06

В этом адаптере можно вызвать notifyDatasetChanged() точно также как и в стандартном

UPD. Навскидку как-то так:

ArrayList<String> entries = new ArrayList<String>(Arrays.asList("A", "B"));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, entries);
adapter.add("C");
adapter.notifyDatasetChanged();
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Fedya
Сообщения: 4
Зарегистрирован: 04 сен 2014, 17:15

Re: Добавить элементы в listview arrayadapter

Сообщение Fedya » 04 сен 2014, 20:38

Но у вас получается как бы один массив из a,b,c, а мне надо несколько (как в примере: id и text)
или я чего-то не понял

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Добавить элементы в listview arrayadapter

Сообщение anber » 05 сен 2014, 17:43

String[] id никак не используется. Вариантов тут несколько:
1) если String[] id, String[] text одного размера - то создать список моделей такого вида:

Код: Выделить всё

public class MyModel {
  public String id;
  public String text;
}
2) передавать не массивы String[] а списки List<String> и в активити хранит ссылки на эти списки и там добавлять в них елементы
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Ответить