одно действие, несколько просмотров?

#android #listview #views #android-intent

#Android #просмотр списка #Вид #android-намерение

Вопрос:

Я хочу создать список с возможностью сортировки его в порядке возрастания или убывания. Я могу сделать это, используя разные намерения. Есть ли способ сделать это, не имея нового намерения? Пример, который приходит мне на ум, — это Управление приложениями в Android. Сортировка по названию и размеру происходит на одном экране. Как это делается?

Редактировать — у меня есть список, скажем, из 20 пунктов. Прямо сейчас я сортирую элементы списка и отображаю только 5 лучших элементов. Я также хочу добавить опцию для отображения нижних 5 элементов. Я сделал это, создав новый класс, точно такой же, как предыдущий класс, с верхним массивом, замененным нижним массивом.

Комментарии:

1. Я предполагаю, что вы можете программно изменить порядок списка (вместо того, чтобы указывать его в layout.xml ), не так ли?

2. Я предполагаю, что теперь вы используете два разных действия для отображения списка в разном порядке, и вы хотите изменить порядок просмотра списка в пределах одного действия. Верно?

3. Вы можете изменить свой адаптер для сортировки данных. Я думаю, что ArrayAdapter поддерживает функцию сортировки. опубликуйте некоторый код, мы можем обновить его на основе этого.

4. Картикеян — У меня уже есть отсортированный список. Я отредактировал запрос с дополнительной информацией.

Ответ №1:

Вы можете повторно отсортировать базовую структуру данных, прежде чем устанавливать ее в адаптере.

Комментарии:

1. Это то, что я недавно сделал — отсортируйте свой список и вызовите адаптер. notifyDataSetChanged() (или аналогичный — не рядом с банкоматом ПК). Просто не забудьте не создавать новый список, так как адаптер все равно будет ссылаться на исходный.

Ответ №2:

Обычно список отображается с помощью ListView . ListViews обычно с ними связан адаптер. Представления перечислены в том порядке, в котором они существуют в адаптере. Итак, чтобы изменить порядок элементов в списке, все, что вам нужно сделать, это установить для него новый адаптер, в котором элементы упорядочены по вашему желанию (вы также можете попробовать изменить порядок элементов существующего адаптера, но я не знаю, можно ли это сделать).

Вы можете просмотреть пример ListView Hello World, чтобы лучше понять ListViews .

Ответ №3:

Уманг, у меня сейчас нет eclipse, и я просто хочу выразить ход своих мыслей, чтобы решить вашу проблему. Пожалуйста, напишите коды самостоятельно и протестируйте его.

  1. С вашим listview должен быть связан адаптер, внутри которого вы можете установить переменную для отслеживания режима заказа, например: private int mode;
  2. Внутри метода getView() адаптера, основанного на mode , возвращайте элементы по своему усмотрению. Я думаю, вы выполнили описанные выше шаги, поскольку вы уже можете изменить порядок.
  3. В первом действии вы можете установить какое-либо событие для пользователя, чтобы изменить порядок, т.е. Через меню. Итак, вы переопределяете public boolean onCreateOptionsMenu (Menu menu) .
  4. В соответствующем public boolean onOptionsItemSelected (MenuItem item) вы устанавливаете mode значение на основе индекса элемента, выбранного пользователем.
  5. Вызов adapter.notifyDataSetChanged() , чтобы уведомить систему о том, что данные для ListView были изменены.
  6. вызовите listView.invalidate() , чтобы показать новый ListView.

Ответ №4:

Класс ArrayAdapter имеет встроенный метод сортировки с помощью «sort (Comparator comparator)», при условии, что вы готовы потрудиться, чтобы написать компараторы, которые вам нужны для сортировки. Я использую этот метод для сортировки «на месте», без необходимости перезагрузки адаптера с помощью внешнего переупорядоченного списка.

Проверьте http://developer.android.com/reference/android/widget/ArrayAdapter.html

и http://developer.android.com/reference/java/util/Comparator.html