Горизонтальный ListView в Android? - PullRequest
212 голосов
/ 13 июля 2010

Можно ли сделать ListView по горизонтали? Я сделал это, используя вид галереи, но выбранный элемент автоматически попадает в центр экрана. Я не хочу, чтобы выбранный элемент находился в том же месте, где я щелкал. Как я могу исправить эту проблему? Моя идея состояла в том, чтобы установить ListView с горизонтальной прокруткой. Поделитесь своей идеей?

Ответы [ 19 ]

4 голосов
/ 13 июля 2010

Это не очень хороший ответ, но как насчет использования Горизонтального прокрутки ?

3 голосов
/ 14 ноября 2010

Я много занимался поиском решения этой проблемы. Короткий ответ: нет хорошего решения без переопределения частных методов и тому подобного. Лучшее, что я нашел, - это реализовать его с нуля, добавив AdapterView. Это довольно жалко. Смотрите мой ТАК вопрос о горизонтальных ListViews .

3 голосов
/ 09 сентября 2012

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

http://aniqroid.sileria.com/doc/api/ (Найдите загрузки внизу или воспользуйтесь проектом кода Google, чтобы увидеть больше вариантов загрузки: http://code.google.com/p/aniqroid/downloads/list)

Документация класса здесь: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html

1 голос
/ 06 марта 2015

Для моего приложения я использую HorizontalScrollView, содержащий LinearLayout внутри, у которого ориентация установлена ​​на горизонтальную. Чтобы добавить изображения внутрь, я создаю ImageViews внутри упражнения и добавляю их в свой LinearLayout. Например:

<HorizontalScrollView 
        android:id="@+id/photo_scroll"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scrollbars="horizontal"
        android:visibility="gone">

        <LinearLayout 
            android:id="@+id/imageview_holder"
            android:layout_width="wrap_content"
            android:orientation="horizontal"
            android:layout_height="match_parent">

        </LinearLayout>
    </HorizontalScrollView>

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

LinearLayout imgViewHolder = findViewById(R.id.imageview_holder);
ImageView img1 = new ImageView(getApplicationContext());
//set bitmap
//set img1 layout params
imgViewHolder.add(img1);
ImageView img2 = new ImageView(getApplicationContext());
//set bitmap
//set img2 layout params
imgViewHolder.add(img2); 

Как я уже сказал, это работает для меня, и я надеюсь, что это поможет кому-то, кто хочет достичь этого.

0 голосов
/ 28 апреля 2014

Я использовал горизонтальную ссылку списка в своем проекте и получил хорошие результаты.Сначала я использовал библиотеку devsmart , но это вызвало у меня некоторые проблемы.Так что лучший способ использовать горизонтальную ссылку в виде списка , поскольку это устраняет мои проблемы, а также недавно я запустил свое приложение в Google PlayStore с помощью этой библиотеки и получил хороший отклик от пользователей.Поэтому я рекомендую вам использовать ту же библиотеку, о которой я упоминал выше, для горизонтального отображения списка.Наслаждайтесь:)

0 голосов
/ 14 июля 2010

хорошо, вы всегда можете динамически создавать свои текстовые представления и т. Д. И настраивать свои onclicklisteners, как это было бы с адаптером

0 голосов
/ 19 октября 2012

HorizontialListView не может работать, когда данные в адаптере вовлечены в другой поток.Все работает на 100% в потоке пользовательского интерфейса. Это большая проблема в многопоточности.Я думаю, что использование HorizontialListView - не лучшее решение для вашей проблемы. HorzListView - лучший способ. Просто замените предыдущую галерею HorzListView. Вам не нужно изменять код адаптера. Тогда все идет так, как вы надеетесь.1002 * о HorzListView.

0 голосов
/ 04 мая 2016

Для этого есть отличная библиотека, которая называется TwoWayView , ее очень легко реализовать, просто включите библиотеку проектов в рабочее пространство и добавьте ее в качестве проекта библиотеки в исходный проект, а затем выполните следующие действия.следующие шаги, которые изначально упоминаются здесь :

Сначала давайте добавим стиль, указывающий ориентацию ListView (горизонтальный или вертикальный) в (res / values ​​/ styles.xml)):

<style name="TwoWayView">
    <item name="android:orientation">horizontal</item>
</style>

Затем,

В XML-файле макета используйте следующий код для добавления TwoWayView:

<org.lucasr.twowayview.TwoWayView 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/lvItems"
     style="@style/TwoWayView"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:drawSelectorOnTop="false"
     tools:context=".MainActivity" />

и, наконец, просто объявите это и разберитесь с ним как с обычными ListView:

TwoWayView lvTest = (TwoWayView) findViewById(R.id.lvItems);

Все методы ListView будут работать здесь как обычно, но я заметил только одно отличие, которое я заметил:при установке режима выбора метод setChoiceMode принимает не значение int, а значение из enum, называемое ChoiceMode, поэтому list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE); будет lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE.

0 голосов
/ 31 июля 2013

Вы можете использовать ViewFlipper для включения макета XML и добавления изображений, списка для каждого макета XML

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