ListView horizontal no Android?


215

É possível fazer o ListViewhorizontalmente? Fiz isso usando uma visualização de galeria, mas o item selecionado chega ao centro da tela automaticamente. Não quero o item selecionado no mesmo local em que cliquei. Como posso corrigir este problema? Minha idéia era definir o ListViewcom um pergaminho horizontal. Compartilhe sua ideia?


1
use este link do meu post para criar o listView horizontal Espero que ajude você.
FAIZ ANWAR

2
@Indra esse blog u mencionado foi removido
Animesh Mangla

Você pode verificar este exemplo thedeveloperworldisyours.com/android/...
Cabezas

Respostas:


123

De acordo com a documentação do Android, RecyclerViewé a nova maneira de organizar os itens na exibição de lista e ser exibida horizontalmente

Vantagens:

  1. Como usando o Recyclerview Adapter, o padrão ViewHolder é implementado automaticamente
  2. A animação é fácil de executar
  3. Muito mais recursos

Mais informações sobre RecyclerView:

  1. grokkingandroid.com
  2. antonioleiva.com

Amostra:

survivingwithandroid.com

Basta adicionar o bloco abaixo para fazer a ListViewhorizontal da vertical

Fragmento de código

LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(layoutManager);

1
Essa será a melhor solução se os problemas com o LayoutManager forem corrigidos pelo Google. code.google.com/p/android/issues/detail?id=74772
Ponsuyambu Velladurai 15/06/2015

para construir uma visão simples de reciclagem, usar este exemplo: android-examples.com/...
Matcoil

1
Ok, qual o caminho para os widgets?
Vladislav

Ao contrário de outras visualizações suportadas pelo adaptador, como ListView ou GridView, o RecyclerView permite que o código do cliente forneça disposições de layout personalizadas para visualizações filho. Esses arranjos são controlados pelo RecyclerView.LayoutManager. Um LayoutManager deve ser fornecido para o RecyclerView funcionar.
Yohanes AI

O RecyclerView ainda não consegue lidar com cliques nos itens (não mencione a classe RecyclerView.Selection) tão bom e fácil quanto o ListView - esse é um dos poucos motivos pelos quais acho que o RecyclerView não é a melhor resposta para esta pergunta.
Edward Quixote

60

Paul não se preocupa em corrigir erros de sua biblioteca ou aceitar correções de usuários. É por isso que estou sugerindo outra biblioteca que tem funcionalidade semelhante:

https://github.com/sephiroth74/HorizontalVariableListView

Atualização : em 24 de julho de 2013, o autor (sephiroth74) lançou a versão completamente reescrita com base no código do Android 4.2.2 ListView. Devo dizer que não possui todos os erros que a versão anterior possuía e funciona muito bem!


2
Essa deve ser uma resposta aceita, porque esse HorizontalVariableListView é muito mais avançado que o de Paul. Por exemplo, ele tem um método apropriado para selecionar a posição em uma lista, a de Paul possui "TODO: implementar algum dia" em seu lugar.
usar o seguinte comando

5
Nota esta solução requer Android 2.3 ou superior
user1032613

1
O HorizontalVariableListView de sephiroth74 é exatamente o que você espera que seja: Uma cópia do ListView do código-fonte do Android com todos os métodos atualizados para mover horizontalmente e não verticalmente. Ainda não encontrei nenhum problema. Muito obrigado por me direcionar para lá, Malachiasz!
SilithCrowe

bem wrap_content para listview ainda não é suportado nesta lib
Kalpesh Lakhani

1
Agora está obsoleto #
Animesh Mangla

28

A resposta @Paul está vinculada a uma ótima solução, mas o código não permite o uso de onClickListeners em itens filhos (as funções de retorno de chamada nunca são chamadas). Estou lutando há um tempo para encontrar uma solução e decidi postar aqui o que você precisa modificar nesse código (no caso de alguém precisar).

Em vez de substituir a dispatchTouchEventsubstituição onTouchEvent. Use o mesmo código dispatchTouchEvente exclua o método (você pode ler a diferença entre os dois aqui http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean handled = mGesture.onTouchEvent(event);
    return handled;
}

Em seguida, adicione o código a seguir que decidirá roubar o evento dos filhos do item e entregá-lo ao nosso onTouchEvent, ou permitir que ele seja tratado por eles.

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch( ev.getActionMasked() ){
        case MotionEvent.ACTION_DOWN:
             mInitialX = ev.getX();
             mInitialY = ev.getY();             
             return false;
        case MotionEvent.ACTION_MOVE:
             float deltaX = Math.abs(ev.getX() - mInitialX);
             float deltaY = Math.abs(ev.getY() - mInitialY);
             return ( deltaX > 5 || deltaY > 5 );
        default:
             return super.onInterceptTouchEvent(ev);
    }
}

Por fim, não se esqueça de declarar as variáveis ​​em sua classe:

private float mInitialX;
private float mInitialY;

13
Por que você não envia isso como uma solicitação de recebimento para Paul?
Cristian

O ev.getActionMasked () não está disponível na plataforma Android 2.1. Você sabe como superar isso?
Eugene Popovich

Parece que i pode usar int maskedAction = ev.getAction () & MotionEvent.ACTION_MASK que shold ser igual a ev.getMaskedAction ()
Eugene Popovich

Realmente útil! mas, ao mudar o código para onTouchEvent, obtive um deslocamento estranho. Guardei-o em dispatchTouchEvent e funciona perfeitamente! Graças
jbc25

jbc25 posso confirmar que saltos estranhos ocorrem se usar essa correção #
Eugene Popovich

23

Desde que o Google introduziu a Android Support Library v7 21.0.0, você pode usar o RecyclerView para rolar os itens horizontalmente. O widget RecyclerView é uma versão mais avançada e flexível do ListView.

Para usar o RecyclerView, basta adicionar dependência:

com.android.support:recyclerview-v7:23.0.1

Aqui está uma amostra:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(layoutManager);

        MyAdapter adapter = new MyAdapter(myDataset);
        recyclerView.setAdapter(adapter);
    }
}

Mais informações sobre o RecyclerView:


21

Isso é um pouco (muito) atrasado, mas estou postando isso no caso de alguém aparecer mais tarde.

A Biblioteca de suporte da pré-visualização do Android L tem RecyclerViewexatamente o que você deseja.

No momento, você só pode obtê-lo através do SDK de visualização L e precisa configurá-lo minSdkcomo L. Mas você pode copiar todos os arquivos necessários para o seu projeto e usá-los dessa maneira até L sair oficialmente.

Você pode fazer o download dos documentos de visualização aqui .

Aviso: A API do Recycler View pode mudar e pode ter erros.

Atualizada

O código fonte da visualização em lista horizontal é:

LinearLayoutManager layoutManager
    = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);

RecyclerView myList = findViewById(R.id.my_recycler_view);
myList.setLayoutManager(layoutManager);

Oi, isso funciona? porque tento e não consigo fazer um RecyclerView horizontal. Você pode colocar algum código? graças
Cocorico

Basta definir o LinearLayoutManager- veja aqui: stackoverflow.com/questions/28460300/…
Stéphane

19

Faça o download do arquivo jar aqui

Agora, coloque-o na pasta libs, clique com o botão direito do mouse e selecione 'Adicionar como biblioteca'

agora em main.xml coloque esse código

 <com.devsmart.android.ui.HorizontalListView
    android:id="@+id/hlistview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

agora na classe Activity, se você quiser o Horizontal Listview com imagens, coloque este código

  HorizontalListView hListView = (HorizontalListView) findViewById(R.id.hlistview);
    hListView.setAdapter(new HAdapter(this));


 private class HAdapter extends BaseAdapter {

    LayoutInflater inflater;

    public HAdapter(Context context) {
        inflater = LayoutInflater.from(context);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Const.template.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listinflate, null);
            holder = new HViewHolder();
            convertView.setTag(holder);

        } else {
            holder = (HViewHolder) convertView.getTag();
        }
        holder.img = (ImageView) convertView.findViewById(R.id.image);
        holder.img.setImageResource(Const.template[position]);
        return convertView;
    }

}

class HViewHolder {
    ImageView img;
}

não suporta nenhum seletor ou nenhum seletor personalizado? qualquer ideia?
Nitin Misra

Posso adicionar uma matriz de números em vez de imagens?
souravlahoti

@BeingSrv yes You can
Siddhpura Amit

Depois de colocá-lo em libs pasta, clique com o botão direito nele e hit 'Adicione como biblioteca'
M. Usman Khan

Como listar desenvolvedor horizontallistview como no pulso, bbcnews Por favor me ajude
Harsha

13

Na verdade, é muito simples : basta girar a exibição da lista para ficar de lado

mlistView.setRotation(-90);

Depois de inflar os filhos, isso deve estar dentro do método getView. você gira as crianças para ficar em pé:

 mylistViewchild.setRotation(90);

Editar: se o seu ListView não se encaixar corretamente após a rotação, coloque o ListView dentro deste RotateLayout da seguinte maneira:

 <com.github.rongi.rotate_layout.layout.RotateLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:angle="90"> <!-- Specify rotate angle here -->

    <ListView
       android:layout_width="match_parent"
       android:layout_height="match_parent">
    </ListView>
</com.github.rongi.rotate_layout.layout.RotateLayout>

1
Eu tentei - não é tão simples. Não consegui ajustar a exibição girada à largura e altura da tela. E essa API está disponível apenas em novos dispositivos.
Malachiasz

Antes de girar, defina a largura do listViews para a altura da tela E defina a altura do listviews para a largura da tela. (Ou seja, se você deseja que o listview preencha a tela), defina-o para a altura e largura desejadas antes de girá-lo .
Kc ochibili

1
você está tentando o que diz? Eu tenho e nada disso funciona.
Malachiasz

você tentou alterar os valores depois de girar? Não vejo por que não deveria funcionar. (se você está se perguntando como é que você sabe a altura anterior e valores de largura depois de rodar, você pode salvá-los em uma variável antes de girar e depois aplicá-los depois de rodar.
kc ochibili

A nova versão desta biblioteca ( stackoverflow.com/a/16589629/2075875 ) faz o trabalho como deveria e funciona no android 2.3 enquanto setRotation () está disponível desde o 3.0, então não quero brincar com rodar novamente, mas incentivo tente você mesmo e apresente o código de trabalho.
Malachiasz 8/08

9

Minha solução é simplesmente usar o ViewPagerwidget. Ele não é travado centralmente Gallerye possui recursos internos para reciclagem de visualizações (as ListView). Você pode ver uma abordagem semelhante no aplicativo Google Play sempre que lida com listas roláveis ​​horizontalmente.

Você só precisa estender PagerAdaptere executar alguns ajustes lá:

public class MyPagerAdapter extends PagerAdapter {

    private Context mContext;

    public MyPagerAdapter(Context context) {
        this.mContext = context;
    }

    // As per docs, you may use views as key objects directly 
    // if they aren't too complex
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.item, null);
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount() {
        return 10;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    // Important: page takes all available width by default,
    // so let's override this method to fit 5 pages within single screen
    @Override
    public float getPageWidth(int position) {
        return 0.2f;
    }
}

Como resultado, você terá um widget de rolagem horizontal com adaptador, assim: insira a descrição da imagem aqui


3
é rolável como o ListView, mas na direção horizontal. A única diferença que vejo: os itens estão rolando um por um, portanto, não é possível rolar para algum lugar no meio do próximo item. Mas é assim que o ViewPager funciona.
fraggjkee

8

Nota: O Android agora suporta exibições de lista horizontais usando o RecyclerView, agora esta resposta foi preterida, para obter informações sobre o RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView

Eu desenvolvi uma lógica para fazer isso sem usar nenhuma biblioteca de rolagem horizontal externa. Aqui está a visualização horizontal que eu obtive e publiquei minha resposta aqui: https://stackoverflow.com/a/33301582/5479863

Minha resposta json é esta:

{"searchInfo":{"status":"1","message":"Success","clist":[{"id":"1de57434-795e-49ac-0ca3-5614dacecbd4","name":"Theater","image_url":"http://52.25.198.71/miisecretory/category_images/movie.png"},{"id":"62fe1c92-2192-2ebb-7e92-5614dacad69b","name":"CNG","image_url":"http://52.25.198.71/miisecretory/category_images/cng.png"},{"id":"8060094c-df4f-5290-7983-5614dad31677","name":"Wine-shop","image_url":"http://52.25.198.71/miisecretory/category_images/beer.png"},{"id":"888a90c4-a6b0-c2e2-6b3c-561788e973f6","name":"Chemist","image_url":"http://52.25.198.71/miisecretory/category_images/chemist.png"},{"id":"a39b4ec1-943f-b800-a671-561789a57871","name":"Food","image_url":"http://52.25.198.71/miisecretory/category_images/food.png"},{"id":"c644cc53-2fce-8cbe-0715-5614da9c765f","name":"College","image_url":"http://52.25.198.71/miisecretory/category_images/college.png"},{"id":"c71e8757-072b-1bf4-5b25-5614d980ef15","name":"Hospital","image_url":"http://52.25.198.71/miisecretory/category_images/hospital.png"},{"id":"db835491-d1d2-5467-a1a1-5614d9963c94","name":"Petrol-Pumps","image_url":"http://52.25.198.71/miisecretory/category_images/petrol.png"},{"id":"f13100ca-4052-c0f4-863a-5614d9631afb","name":"ATM","image_url":"http://52.25.198.71/miisecretory/category_images/atm.png"}]}}

Arquivo de layout:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="5">    
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" />
    <HorizontalScrollView
        android:id="@+id/horizontalScroll"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal">    
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

arquivo de classe:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);
        for (int v = 0; v < collectionInfo.size(); v++) {
            /*---------------Creating frame layout----------------------*/

            FrameLayout frameLayout = new FrameLayout(ActivityMap.this);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, getPixelsToDP(90));
            layoutParams.rightMargin = getPixelsToDP(10);
            frameLayout.setLayoutParams(layoutParams);

            /*--------------end of frame layout----------------------------*/

            /*---------------Creating image view----------------------*/
            final ImageView imgView = new ImageView(ActivityMap.this); //create imageview dynamically
            LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            imgView.setImageBitmap(collectionInfo.get(v).getCatImage());
            imgView.setLayoutParams(lpImage);
            // setting ID to retrieve at later time (same as its position)
            imgView.setId(v);
            imgView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    // getting id which is same as its position
                    Log.i(TAG, "Clicked on " + collectionInfo.get(v.getId()).getCatName());
                    // getting selected category's data list
                    new GetSelectedCategoryData().execute(collectionInfo.get(v.getId()).getCatID());
                }
            });
            /*--------------end of image view----------------------------*/

            /*---------------Creating Text view----------------------*/
            TextView textView = new TextView(ActivityMap.this);//create textview dynamically
            textView.setText(collectionInfo.get(v).getCatName());
            FrameLayout.LayoutParams lpText = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER);
            // Note: LinearLayout.LayoutParams 's gravity was not working so I putted Framelayout as 3 paramater is gravity itself
            textView.setTextColor(Color.parseColor("#43A047"));
            textView.setLayoutParams(lpText);
            /*--------------end of Text view----------------------------*/

            //Adding views at appropriate places
            frameLayout.addView(imgView);
            frameLayout.addView(textView);
            linearLayout.addView(frameLayout);

        }

 private int getPixelsToDP(int dp) {
        float scale = getResources().getDisplayMetrics().density;
        int pixels = (int) (dp * scale + 0.5f);
        return pixels;
    }

O truque que está funcionando aqui é o ID que eu atribuí ao ImageView "imgView.setId (v)" e, depois disso, aplique onClickListener e estou novamente buscando o ID da exibição .... Também comentei dentro do código para que é fácil de entender, espero que isso seja muito útil ... Happy Coding ... :)

http://i.stack.imgur.com/lXrpG.png


1
Eu tenho editado e postado a explicação completa aqui, obrigado pela sugestão :)
Abdul Aziz

Olá obrigado pelo seu código, você pode postar o método getPixelsToDP()?
Skizo-ozᴉʞS

@Skizo eu adicionei esse método no final do código java, ter um olhar
Abdul Aziz


5

Você pode usar o RecyclerView na biblioteca de suporte. RecyclerView é uma versão generalizada do ListView que suporta:

  • Um gerente de layout para posicionar itens
  • Animações padrão para operações de itens comuns

Reciclador Android Visualizar documentos


Esta é a resposta real até esta data tardia. Mas mesmo isso ainda não está pronto e ainda está em 'preview'
Martin

3

Pesquisei bastante uma solução para esse problema. A resposta curta é que não existe uma boa solução, sem substituir métodos privados e esse tipo de coisa. A melhor coisa que encontrei foi implementá-lo do zero, estendendo-o AdapterView. É muito infeliz. Veja minha pergunta SO sobre ListViews horizontais .


Infelizmente sua resposta é a correta. Até o Google confirma que a única maneira de exibição de lista horizontal é a Galeria. Mas o Gallery não é o mesmo que uma exibição de lista horizontal. Você gostaria de compartilhar seu código? Você recicla visualizações?
Patrick Boos 22/02

1
Infelizmente, o código foi escrito para minha empresa e, portanto, é proprietário. No entanto, espero encontrar algum tempo livre nos próximos meses para reescrevê-lo (a implementação original é bastante instável) e liberá-lo para o domínio público. Também posso dizer que comecei com esta demonstração da Sony Ericsson, alterando todos os 'x' para 'y' e todos os 'width' para 'height'. Em seguida, removi as transformações 3D e adicionei o comportamento de parar no final.
Neil Traft

@ Neil Traft, como você fixou a posição dos itens? E quanto a parar no final?
Adrian Magdas

Honestamente, realmente era apenas um monte de suposições. Demorou muito tempo para acertar, e estou convencido de que há uma maneira melhor. Mas a premissa básica é que, no fillListDown()método, você precisa acompanhar a borda inferior do último item da lista. Mas você não sabe onde está essa borda até criar o último item (adapter.getCount () - 1). Então, você espera até que esse item seja criado e pode armazenar a localização da borda. Depois que você souber disso, verifique se mListTop nunca é menor que 0 e nunca maior que a altura da lista.
Neil Traft

1
Se você realmente não precisa, absolutamente, de uma lista horizontal, eu o encorajo a desistir ou usar a Galeria.
Neil Traft

3

Eu tive que fazer o mesmo em um dos meus projetos e acabei escrevendo o meu também. Eu o chamei HorzListView agora faz parte da minha biblioteca Aniqroid de código aberto .

http://aniqroid.sileria.com/doc/api/ (procure por downloads na parte inferior ou use o projeto de código do google para ver mais opções de download: http://code.google.com/p/aniqroid/downloads/list )

A documentação da classe está aqui: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html


Como posso definir a posição da rolagem programaticamente?
Dima Portenko

O método setSelection () existe, mas pode não ser 100% implementado. Tente.
Sileria 29/03

1

Para o meu aplicativo, eu uso um HorizontalScrollView contendo LinearLayout dentro, com orientação definida como horizontal. Para adicionar imagens dentro, eu crio ImageViews dentro da atividade e as adiciono ao meu LinearLayout. Por exemplo:

<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>

E isso funciona perfeitamente bem para mim. Na atividade, tudo o que tenho a fazer é algo como o código abaixo:

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); 

Como eu disse, isso funciona para mim e espero que ajude alguém que também queira alcançar isso.


0

bem, você sempre pode criar suas visualizações de texto etc. dinamicamente e definir seus onclicklisteners como faria com um adaptador


O que você quer dizer? eu não posso te pegar? poste um snippet de código sobre sua ideia?
Praveen

diga-me o objetivo da "lista horizontal" terá visões complexas / múltiplas? por exemplo, 2 caixas de texto 1 barra de progresso? ou apenas digamos texto sem formatação? Você também tem um número fixo de elementos nessa exibição ou deseja alterá-lo dinamicamente? Responda-me a estas e eu poderei ajudá-lo com o código #
fracowire

Eu quero fazer a galeria de texto horizontal. mas o item selecionado chega ao centro como padrão. Eu quero ser o item selecionado deve estar onde eu cliquei. verifique também minhas postagens: stackoverflow.com/questions/3237566/text-gallery-on-android e stackoverflow.com/questions/3318617/…
Praveen

0

O HorizontialListView não pode funcionar quando os dados no adaptador estão envolvidos em outro encadeamento. Tudo é executado 100% no thread da interface do usuário. Esse é um grande problema no multithread. Acho que usar o HorizontialListView não é a melhor solução para o seu problema. O HorzListView é a melhor maneira. Você substitui a Galeria anterior pelo HorzListView. Você não precisa modificar o código do adaptador . stackoverflow.com/a/12339708/1525777 sobre o HorzListView.


0

Eu tinha usado o link listview horizontal no meu projeto e obtive bons resultados. Eu tinha sido usado inicialmente na biblioteca devsmart, mas isso me causou alguns problemas. Então, a melhor maneira de usar o link de visualização horizontal como ele recuperou meus problemas e também iniciei recentemente meu aplicativo no Google PlayStore usando esta biblioteca e obtive uma ótima resposta dos usuários. Por isso, recomendo que você use a mesma biblioteca que mencionei acima para mostrar o listview horizontalmente. Aproveitar :)


0

Existe uma ótima biblioteca para isso, chamada TwoWayView , que é muito fácil de implementar, basta incluir a biblioteca do projeto no seu espaço de trabalho e adicioná-la como um projeto de biblioteca ao seu projeto original e, em seguida, seguir as seguintes etapas originalmente mencionadas aqui :

Primeiro, vamos adicionar um estilo indicando a orientação do ListView (horizontal ou vertical) em (res / values ​​/ styles.xml):

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

Então,

No XML do layout, use o seguinte código para adicionar o 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" />

e finalmente, apenas declare-o e lide com ele como qualquer outro regular ListView:

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

Todos os métodos de ListViewtrabalharão aqui como de costume, mas há apenas uma diferença que notei: quando o modo de escolha setChoiceModeé intdefinido , o método não assume um valor, mas um valor enumchamado ChoiceMode, assim list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);será lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE.


1
Tentei fazer isso - mas não me permite usar o meu próprio ArrayAdapter <PreviewImage>
DeNitE Appz

-1

Você pode usar o ViewFlipper para incluir o XML do layout e adicionar imagens, listview para cada XML do layout

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.