ListView orizzontale in Android?


215

È possibile effettuare il lavoro in ListVieworizzontale? L'ho fatto usando una vista galleria, ma l'elemento selezionato viene automaticamente al centro dello schermo. Non voglio l'elemento selezionato nello stesso punto in cui ho fatto clic. Come posso risolvere questo problema? La mia idea era quella di impostare il ListViewcon una pergamena orizzontale. Condividi la tua idea?


1
usa questo link del mio post per creare la lista orizzontale Visualizza Spero che ti possa aiutare.
FAIZ ANWAR,

2
@Indra quel blog che hai citato è stato rimosso
Animesh Mangla il

È possibile controllare questo esempio thedeveloperworldisyours.com/android/…
Cabezas

Risposte:


123

Secondo la documentazione Android RecyclerViewè il nuovo modo di organizzare gli elementi in visualizzazione elenco e di visualizzarli in orizzontale

vantaggi:

  1. Poiché utilizzando l'adattatore Recyclerview, il modello ViewHolder viene implementato automaticamente
  2. L'animazione è facile da eseguire
  3. Molte altre funzionalità

Ulteriori informazioni su RecyclerView:

  1. grokkingandroid.com
  2. antonioleiva.com

Campione:

survivingwithandroid.com

Basta aggiungere il blocco sottostante per rendere l' ListVieworizzontale dalla verticale

Codice-frammento

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

1
Questa sarà la soluzione migliore se i problemi con LayoutManager sono risolti da google. code.google.com/p/android/issues/detail?id=74772
Ponsuyambu Velladurai

per creare una semplice visualizzazione di riciclatore, usa questo esempio: android-examples.com/…
Matcoil

1
Ok, quale modo per i widget?
Vladislav,

Contrariamente ad altre viste supportate dall'adattatore come ListView o GridView, RecyclerView consente al codice client di fornire disposizioni di layout personalizzate per le viste figlio. Queste disposizioni sono controllate da RecyclerView.LayoutManager. È necessario fornire un LayoutManager affinché RecyclerView funzioni.
Yohanes AI,

RecyclerView non è ancora in grado di gestire i clic sugli elementi (non menzionare la classe RecyclerView.Selection) buono e facile come ListView: questo è uno dei pochi motivi per cui penso che RecyclerView non sia la migliore risposta a questa domanda.
Edward Chisciotte

60

Paul non si preoccupa di correggere i bug della sua libreria o accettare correzioni degli utenti. Ecco perché sto suggerendo un'altra libreria che ha funzionalità simili:

https://github.com/sephiroth74/HorizontalVariableListView

Aggiornamento : il 24 luglio 2013 l'autore (sephiroth74) ha rilasciato la versione completamente riscritta basata sul codice di Android 4.2.2 ListView. Devo dire che non ha tutti gli errori della versione precedente e funziona alla grande!


2
Questa dovrebbe essere una risposta accettata, perché questo HorizontalVariableListView è molto più avanzato di quello di Paul. Ad esempio ha un metodo appropriato per selezionare la posizione in un elenco, quello di Paul ha "TODO: implementare un giorno" al suo posto.
Yan.Yurkin,

5
Nota che questa soluzione richiede Android 2.3 o versioni successive
user1032613

1
HorizontalVariableListView di sephiroth74 è esattamente ciò che speri sia: una copia di ListView dal codice sorgente Android con tutti i metodi aggiornati per spostarsi in orizzontale anziché in verticale. Non ho ancora riscontrato alcun problema. Grazie mille per avermi indirizzato lì, Malachiasz!
SilithCrowe,

ben wrap_content to listview non è ancora supportato in questa lib
Kalpesh Lakhani,

1
Ora è deprecato
Animesh Mangla,

28

La risposta di @Paul si collega a un'ottima soluzione, ma il codice non consente di utilizzare onClickListeners su elementi figlio (le funzioni di callback non vengono mai chiamate). Ho lottato per un po 'per trovare una soluzione e ho deciso di pubblicare qui ciò che è necessario modificare in quel codice (nel caso qualcuno ne abbia bisogno).

Invece di dispatchTouchEventignorare l'override onTouchEvent. Usa lo stesso codice dispatchTouchEvented elimina il metodo (puoi leggere la differenza tra i due qui http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )

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

Quindi, aggiungi il seguente codice che deciderà di rubare l'evento dall'elemento figlio e darlo al nostro onTouchEvent, o lasciare che sia gestito da loro.

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

Infine, non dimenticare di dichiarare le variabili nella tua classe:

private float mInitialX;
private float mInitialY;

13
Perché non lo invii come richiesta pull a Paul?
Cristian,

ev.getActionMasked () non è disponibile sulla piattaforma Android 2.1. Sai come superare questo?
Eugene Popovich,

sembra che io possa usare int maskedAction = ev.getAction () e MotionEvent.ACTION_MASK che saranno uguali a ev.getMaskedAction ()
Eugene Popovich

Davvero utile! ma cambiando il codice in onTouchEvent ho ottenuto un offset strano. L'ho tenuto in dispatchTouchEvent e funziona perfettamente! Grazie
jbc25 l'

jbc25 posso confermare che si verificano strani salti se usare questa correzione
Eugene Popovich,

23

Da quando Google ha introdotto Android Support Library v7 21.0.0, è possibile utilizzare RecyclerView per scorrere gli elementi in orizzontale. Il widget RecyclerView è una versione più avanzata e flessibile di ListView.

Per usare RecyclerView, aggiungi semplicemente dipendenza:

com.android.support:recyclerview-v7:23.0.1

Ecco un esempio:

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

Maggiori informazioni su RecyclerView:


21

È un po '(molto) in ritardo, ma sto pubblicando questo nel caso in cui qualcuno lo accada più tardi.

La libreria di supporto a partire dall'anteprima di Android L ha una funzione RecyclerViewche fa esattamente quello che vuoi.

Al momento, puoi ottenerlo solo tramite l'SDK di anteprima L e devi impostarlo minSdksu L. Ma puoi copiare tutti i file necessari nel tuo progetto e usarli in quel modo fino a quando L non sarà ufficialmente rilasciato.

Puoi scaricare i documenti di anteprima qui .

Avvertenza: l'API per Recycler View potrebbe cambiare e potrebbe contenere dei bug.

aggiornato

Il codice sorgente per la visualizzazione elenco orizzontale è:

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

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

Ciao funziona? perché ci provo e non riesco a creare un RecyclerView orizzontale. Puoi mettere un po 'di codice? grazie
Cocorico,

Basta impostare il LinearLayoutManager- vedi qui: stackoverflow.com/questions/28460300/…
Stéphane

19

Scarica il file jar da qui

ora inseriscilo nella cartella libs, fai clic con il tasto destro e seleziona 'Aggiungi come libreria'

ora in main.xml inserisci questo codice

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

ora nella classe Activity se vuoi vedere la Listview orizzontale con le immagini, inserisci questo codice

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

non supporta alcun selettore o selettore personalizzato? qualche idea?
Nitin Misra,

Posso aggiungere un array di numeri anziché immagini?
souravlahoti,

@BeingSrv sì Puoi
Siddhpura Amit

Dopo averlo inserito nella cartella libs, fai clic destro e premi 'Aggiungi come libreria'
M. Usman Khan

come l'elenco degli sviluppatori di horizontallistview come in pulse, bbcnews, per favore aiutatemi
Harsha,

13

In realtà è molto semplice : basta ruotare la vista elenco per giacere su un lato

mlistView.setRotation(-90);

Quindi, dopo aver gonfiato i bambini, questo dovrebbe essere all'interno del metodo getView. Ruoti i bambini per alzarti dritto:

 mylistViewchild.setRotation(90);

Modifica: se il tuo ListView non si adatta correttamente dopo la rotazione, posiziona il ListView all'interno di questo RotateLayout in questo modo:

 <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
L'ho provato, non così semplice. Non sono riuscito ad adattare la vista ruotata alla larghezza e all'altezza dello schermo. E questa API è disponibile solo in nuovi dispositivi.
Malachiasz,

Prima di ruotare, imposta la larghezza dell'elenco delle visualizzazioni sull'altezza dello schermo E imposta l'altezza delle visualizzazioni dell'elenco sulla larghezza degli schermi. (Questo è se vuoi che la visualizzazione dell'elenco riempia lo schermo) altrimenti imposta la visualizzazione dell'elenco sull'altezza e la larghezza che desideri prima di ruotarla .
kc ochibili,

1
hai provato quello che dici? Ho e niente di tutto ciò funziona.
Malachiasz,

hai provato a cambiare i valori dopo aver ruotato? non vedo perché non dovrebbe funzionare. (se ti stai chiedendo come faresti a conoscere i valori di altezza e larghezza precedenti dopo la rotazione, potresti salvarli in una variabile prima di ruotare e quindi applicarli dopo la rotazione.
kc ochibili

La nuova versione di questa libreria ( stackoverflow.com/a/16589629/2075875 ) fa il lavoro come dovrebbe e funziona da Android 2.3 mentre setRotation () è disponibile dal 3.0, quindi non voglio giocare di nuovo con rotazione, ma incoraggio per provare tu stesso e presentare il codice di lavoro.
Malachiasz,

9

La mia soluzione è semplicemente usare il ViewPagerwidget. Non è bloccato centralmente Gallerye ha funzionalità integrate per il riciclaggio delle viste (come ListView). Puoi vedere un approccio simile nell'app Google Play ogni volta che gestisci elenchi scorrevoli orizzontalmente.

Devi solo estendere PagerAdaptered eseguire un paio di modifiche 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;
    }
}

Di conseguenza, avrai un widget scorrevole orizzontalmente con adattatore, in questo modo: inserisci qui la descrizione dell'immagine


3
è scorrevole come ListView, ma in direzione orizzontale. L'unica differenza che vedo: gli elementi scorrono uno a uno, quindi non è possibile scorrere da qualche parte al centro dell'elemento successivo. Ma è così che funziona ViewPager.
fraggjkee,

8

Nota: Android ora supporta le visualizzazioni elenco orizzontali utilizzando RecyclerView, quindi ora questa risposta è obsoleta, per informazioni su RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView

Ho sviluppato una logica per farlo senza utilizzare alcuna libreria scrollview orizzontale esterna, ecco la vista orizzontale che ho raggiunto e ho pubblicato la mia risposta qui: https://stackoverflow.com/a/33301582/5479863

La mia risposta json è questa:

{"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"}]}}

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

file di 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;
    }

trucco che funziona qui è l'id che ho assegnato a ImageView "imgView.setId (v)" e dopo che applicando onClickListener a quello sto di nuovo recuperando l'id della vista .... Ho anche commentato all'interno del codice così che è facile da capire, spero che questo possa essere molto utile ... Happy Coding ... :)

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


1
Ho modificato e pubblicato la spiegazione completa qui, grazie per il suggerimento :)
Abdul Aziz,

Ciao grazie per il tuo codice puoi pubblicare il metodo getPixelsToDP()?
Skizo-ozᴉʞS

@Skizo Ho aggiunto quel metodo alla fine del codice Java, dai un'occhiata
Abdul Aziz


5

È possibile utilizzare RecyclerView nella libreria di supporto. RecyclerView è una versione generalizzata di ListView che supporta:

  • Un gestore di layout per posizionare gli oggetti
  • Animazioni predefinite per operazioni su oggetti comuni

Recycler Android Visualizza documenti


Questa è la vera risposta a partire da questa data tardiva. Ma anche questo non è ancora pronto ed è ancora in "anteprima"
Martin,

3

Ho fatto molta ricerca di una soluzione a questo problema. La risposta breve è che non esiste una buona soluzione, senza scavalcare i metodi privati ​​e quel genere di cose. La cosa migliore che ho trovato è stata implementarla da zero estendendola AdapterView. È piuttosto miserabile. Vedi la mia domanda SO sulle ListView orizzontali .


Purtroppo la tua risposta è quella corretta. Anche Google conferma che l'unico modo per la visualizzazione elenco orizzontale è Galleria. Ma la Galleria non è la stessa di una visualizzazione elenco orizzontale. Saresti disposto a condividere il tuo codice? Ricicli le visualizzazioni?
Patrick Boos,

1
Purtroppo il codice è stato scritto per la mia azienda, quindi è proprietario. Tuttavia, spero di trovare un po 'di tempo libero nei prossimi mesi per riscriverlo (l'implementazione originale è piuttosto instabile) e rilasciarlo di dominio pubblico. Posso anche dirti che ho iniziato prendendo questa demo da Sony Ericsson, cambiando tutte le "x" in "y" e tutte le "larghezze" in "altezze". Quindi ho rimosso le trasformazioni 3D e aggiunto il comportamento di arresto alla fine.
Neil Traft,

@Neil Traft come hai corretto la posizione degli oggetti? E che dire di fermarsi alla fine?
Adrian Magdas,

Onestamente, era davvero solo un sacco di congetture. Ci è voluto molto tempo per farlo bene, e sono convinto che ci sia un modo migliore. Ma la premessa di base è che, nel fillListDown()metodo, è necessario tenere traccia del margine inferiore dell'ultimo elemento dell'elenco. Ma non sai dove si trova quel bordo fino a quando non crei effettivamente l'ultimo elemento (adapter.getCount () - 1). Quindi aspetti fino alla creazione di quell'elemento e quindi puoi memorizzare la posizione del bordo. Una volta che lo sai, puoi assicurarti che mListTop non sia mai inferiore a 0 e mai superiore all'altezza dell'elenco.
Neil Traft

1
Se non hai davvero, davvero, ASSOLUTAMENTE bisogno di un elenco orizzontale, ti incoraggerei Vivamente a rinunciare o utilizzare la Galleria.
Neil Traft

3

Ho dovuto fare lo stesso per uno dei miei progetti e ho finito per scrivere anche il mio. L'ho chiamato HorzListView ora fa parte della mia libreria Aniqroid open source .

http://aniqroid.sileria.com/doc/api/ (Cerca i download in fondo o usa il progetto codice google per vedere altre opzioni di download: http://code.google.com/p/aniqroid/downloads/list )

La documentazione della lezione è qui: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html


Come posso impostare la posizione di scorrimento a livello di codice?
Dima Portenko,

Il metodo setSelection () è presente ma potrebbe non essere implementato al 100%. Provalo.
Sileria,

1

Per la mia applicazione, uso un HorizontalScrollView contenente LinearLayout all'interno, con l'orientamento impostato su orizzontale. Per aggiungere immagini all'interno, creo ImageView all'interno dell'attività e le aggiungo al mio LinearLayout. Per esempio:

<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 questo funziona perfettamente per me. Nell'attività tutto quello che devo fare è qualcosa di simile al codice qui sotto:

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

Come ho detto, questo funziona per me e spero che aiuti anche qualcuno che cerca di raggiungere questo obiettivo.


0

bene puoi sempre creare le tue visualizzazioni di testo ecc. in modo dinamico e impostare i tuoi onclicklisteners come faresti con un adattatore


cosa intendi? non riesco a prenderti? per favore pubblica un frammento di codice sulla tua idea?
Praveen,

per favore dimmi lo scopo della "listview orizzontale" avrà viste complesse / multi? ad es. 2 caselle di testo 1 barra di avanzamento? o diciamo semplicemente testo? Hai anche un numero fisso di elementi all'interno di quella vista o vuoi cambiarlo dinamicamente? Rispondimi e sarò in grado di aiutarti con il codice
weakwire

voglio fare la galleria di testo orizzontale. ma l'elemento selezionato viene visualizzato al centro come impostazione predefinita. Voglio essere l'elemento selezionato deve essere dove l'ho cliccato. controlla anche i miei post: stackoverflow.com/questions/3237566/text-gallery-on-android e stackoverflow.com/questions/3318617/…
Praveen,

0

HorizontialListView non può funzionare quando i dati nell'adattatore sono coinvolti in un altro thread. Tutto funziona al 100% sul thread dell'interfaccia utente. Questo è un grosso problema nel multithread. Penso che l'uso di HorizontialListView non sia la soluzione migliore per il tuo problema. HorzListView è un modo migliore. Devi solo sostituire la tua galleria precedente con HorzListView. Non è necessario modificare il codice sull'adattatore, quindi tutto procede come speri. Vedi https: // stackoverflow.com/a/12339708/1525777 su HorzListView.


0

Nel mio progetto avevo usato il collegamento orizzontale listview e ho ottenuto buoni risultati. Inizialmente ero stato usato nella libreria devsmart ma mi ha dato alcuni problemi. Quindi il modo migliore per utilizzare il collegamento orizzontale listview in quanto ha recuperato i miei problemi e anche di recente ho lanciato la mia app su Google PlayStore utilizzando questa libreria e ottenuto una bella risposta dagli utenti. Quindi ti consiglio di usare la stessa libreria che ho menzionato sopra per mostrare listview in senso orizzontale. Godere :)


0

C'è una grande libreria per questo, chiamata TwoWayView , è molto facile da implementare, basta includere la libreria del progetto nello spazio di lavoro e aggiungerla come progetto di libreria al progetto originale, quindi seguire i seguenti passaggi che sono originariamente menzionati qui :

Innanzitutto, aggiungiamo uno stile che indica l'orientamento di ListView (orizzontale o verticale) in (res / valori / styles.xml):

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

Poi,

Nel layout XML, utilizzare il seguente codice per aggiungere 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 infine, dichiaralo e gestiscilo come un normale ListView:

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

Tutti i metodi di ListViewfunzioneranno qui come al solito, ma c'è solo una differenza che ho notato, che è quando si imposta la modalità di scelta, il metodo setChoiceModenon accetta un intvalore ma un valore da enumchiamato ChoiceMode, così list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);sarà lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE.


1
Ho provato questo - ma non mi permetterà di usare il mio ArrayAdapter <PreviewImage>
DeNitE Appz

-1

È possibile utilizzare ViewFlipper per includere l'XML di layout e aggiungere immagini, visualizzazione elenco per ciascun XML di layout

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.