ListView Horisontal di Android?

215

Apakah mungkin membuat ListViewsecara horizontal? Saya telah melakukan ini menggunakan tampilan galeri, tetapi item yang dipilih datang ke tengah layar secara otomatis. Saya tidak ingin item yang dipilih di tempat yang sama saya klik. Bagaimana saya bisa memperbaiki masalah ini? Ide saya adalah mengatur ListViewdengan scroll horizontal. Bagikan ide Anda?

Praveen
sumber
1
menggunakan ini link posting saya untuk membuat Horizontal ListView Saya berharap ini akan membantu Anda.
FAIZ ANWAR
2
@Indra bahwa blog yang Anda sebutkan telah dihapus
Animesh Mangla
Anda dapat memeriksa contoh ini thedeveloperworldisyours.com/android/…
Cabezas

Jawaban:

123

Sesuai Android Dokumentasi RecyclerViewadalah cara baru untuk mengatur item dalam listview dan ditampilkan secara horizontal

Keuntungan:

  1. Karena dengan menggunakan Adaptor Recyclerview, pola ViewHolder diterapkan secara otomatis
  2. Animasi mudah dilakukan
  3. Banyak lagi fitur

Informasi Lebih Lanjut tentang RecyclerView:

  1. grokkingandroid.com
  2. antonioleiva.com

Sampel:

survivingwithandroid.com

Cukup tambahkan blok di bawah ini untuk membuat ListViewhorizontal dari vertikal

Cuplikan kode

LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(layoutManager);
Setan
sumber
1
Ini akan menjadi solusi terbaik jika masalah dengan LayoutManager diperbaiki oleh google. code.google.com/p/android/issues/detail?id=74772
Ponsuyambu Velladurai
untuk membangun tampilan pendaur ulang sederhana, gunakan contoh ini: android-examples.com/...
Matcoil
1
Ok, bagaimana cara widget?
Vladislav
Berbeda dengan tampilan lain yang didukung adaptor seperti ListView atau GridView, RecyclerView memungkinkan kode klien untuk menyediakan pengaturan tata letak khusus untuk tampilan anak. Pengaturan ini dikendalikan oleh RecyclerView.LayoutManager. LayoutManager harus disediakan agar RecyclerView berfungsi.
Yohanes AI
RecyclerView masih tidak dapat menangani klik pada item (jangan menyebutkan kelas RecyclerView.Selection) sebagus dan semudah ListView - itu salah satu dari beberapa alasan mengapa saya pikir RecyclerView bukan jawaban terbaik untuk pertanyaan ini.
Edward Quixote
60

Paul tidak repot-repot memperbaiki bug perpustakaannya atau menerima perbaikan pengguna. Itu sebabnya saya menyarankan perpustakaan lain yang memiliki fungsi serupa:

https://github.com/sephiroth74/HorizontalVariableListView

Pembaruan : pada 24 Juli 2013 penulis (sephiroth74) merilis versi yang sepenuhnya ditulis ulang berdasarkan kode android 4.2.2 ListView. Saya harus mengatakan bahwa itu tidak memiliki semua kesalahan yang dimiliki versi sebelumnya dan berfungsi dengan baik!

Malachiasz
sumber
2
Ini harus menjadi jawaban yang diterima, karena ini HorizontalVariableListView jauh lebih maju daripada yang Paul. Misalnya ia memiliki metode yang tepat untuk memilih posisi dalam daftar, yang Paul punya "TODO: implement suatu hari nanti" di tempatnya.
Yan.Yurkin
5
Catatan solusi ini membutuhkan Android 2.3 atau lebih tinggi
user1032613
1
HorizontalVariableListView sephiroth74 persis seperti yang Anda harapkan: Salinan ListView dari kode sumber android dengan semua metode yang diperbarui untuk bergerak secara horizontal daripada vertikal. Saya belum mengalami masalah apa pun. Terima kasih banyak telah mengarahkan saya ke sana, Malachiasz!
SilithCrowe
juga wrap_content to listview masih tidak didukung di lib ini
Kalpesh Lakhani
1
Sudah dipulihkan sekarang
Animesh Mangla
28

@ Paul jawab tautan ke solusi hebat, tetapi kode tidak mengizinkan untuk menggunakan onClickListeners pada item anak-anak (fungsi panggilan balik tidak pernah dipanggil). Saya telah berjuang selama beberapa saat untuk menemukan solusi dan saya telah memutuskan untuk memposting di sini apa yang perlu Anda modifikasi dalam kode itu (jika seseorang membutuhkannya).

Alih-alih menimpa dispatchTouchEventmenimpa onTouchEvent. Gunakan kode yang sama dispatchTouchEventdan hapus metode (Anda dapat membaca perbedaan antara keduanya di sini http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )

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

Kemudian, tambahkan kode berikut yang akan memutuskan untuk mencuri acara dari item anak-anak dan memberikannya kepada kami onTouchEvent, atau membiarkannya ditangani oleh mereka.

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

Terakhir, jangan lupa mendeklarasikan variabel di kelas Anda:

private float mInitialX;
private float mInitialY;
Xavi Gil
sumber
13
Mengapa Anda tidak mengirim ini sebagai permintaan tarik ke Paul?
Cristian
ev.getActionMasked () tidak tersedia di platform Android 2.1. Apakah Anda tahu cara mengatasinya?
Eugene Popovich
tampaknya saya dapat menggunakan int maskedAction = ev.getAction () & MotionEvent.ACTION_MASK yang seharusnya sama dengan ev.getMaskedAction ()
Eugene Popovich
Sangat berguna! tetapi mengubah kode menjadi onTouchEvent saya mendapat offset aneh. Saya menyimpannya di dispatchTouchEvent dan berfungsi dengan baik! Terima kasih
jbc25
jbc25 saya dapat mengonfirmasi bahwa lompatan aneh terjadi jika menggunakan perbaikan ini
Eugene Popovich
23

Karena Google memperkenalkan Android Support Library v7 21.0.0, Anda dapat menggunakan RecyclerView untuk menggulir item secara horizontal. Widget RecyclerView adalah versi ListView yang lebih canggih dan fleksibel.

Untuk menggunakan RecyclerView, tambahkan saja ketergantungan:

com.android.support:recyclerview-v7:23.0.1

Berikut ini contohnya:

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

Info lebih lanjut tentang RecyclerView:

klimat
sumber
21

Ini sedikit (sangat) terlambat, tapi saya memposting ini kalau-kalau ada yang datang nanti.

Pustaka Dukungan pada pratinjau L Android memiliki RecyclerViewyang tidak persis apa yang Anda inginkan.

Sekarang, Anda hanya bisa mendapatkannya melalui SDK L pratinjau dan Anda perlu mengatur Anda minSdkuntuk L. Tetapi Anda dapat menyalin semua file yang diperlukan ke proyek Anda dan menggunakannya seperti itu sampai L secara resmi keluar.

Anda dapat mengunduh dokumen pratinjau di sini .

Peringatan: API untuk Tampilan Pendaur Ulang dapat berubah dan mungkin memiliki bug.

Diperbarui

Kode sumber untuk tampilan daftar horizontal adalah:

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

RecyclerView myList = findViewById(R.id.my_recycler_view);
myList.setLayoutManager(layoutManager);
Abhay Buch
sumber
Hai, apakah ini berhasil? karena saya mencoba dan saya tidak bisa membuat RecyclerView horizontal. Bisakah kamu menaruh beberapa kode? terima kasih
Cocorico
Cukup atur LinearLayoutManager- lihat di sini: stackoverflow.com/questions/28460300/…
Stéphane
19

Unduh file jar dari sini

sekarang masukkan ke folder libs Anda, klik kanan dan pilih 'Tambahkan sebagai perpustakaan'

sekarang di main.xml cantumkan kode ini

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

sekarang di kelas Activity jika Anda ingin Horizontal Listview dengan gambar kemudian masukkan kode ini

  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;
}
Siddhpura Amit
sumber
itu tidak mendukung pemilih, atau pemilih khusus? ada ide?
Nitin Misra
Bisakah saya menambahkan array angka daripada gambar?
souravlahoti
@BeingSrv ya Anda bisa
Siddhpura Amit
Setelah meletakkannya di folder libs, Klik kanan dan tekan 'Tambahkan sebagai perpustakaan'
M. Usman Khan
bagaimana cara mengembangkan daftar horizontallistview seperti di pulsa, bbcnews tolong bantu saya
Harsha
13

Ini sebenarnya sangat sederhana : Cukup Putar tampilan daftar untuk berbaring miring

mlistView.setRotation(-90);

Kemudian setelah menggembungkan anak-anak, itu harus di dalam metode getView. Anda memutar anak-anak untuk berdiri tegak:

 mylistViewchild.setRotation(90);

Sunting: jika ListView Anda tidak pas dengan rotasi, letakkan ListView di dalam RotateLayout ini seperti ini:

 <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>
kc ochibili
sumber
1
Saya sudah mencobanya - tidak sesederhana itu. Saya tidak berhasil menyesuaikan tampilan yang diputar dengan lebar dan tinggi layar. Dan API ini hanya tersedia di perangkat baru.
Malachiasz
Sebelum memutar, atur listViews lebar ke ketinggian layar dan atur tinggi listviews ke lebar layar .. (Itu adalah jika Anda ingin listview untuk mengisi layar) lain mengatur listview dengan ketinggian dan lebar apa pun yang Anda inginkan sebelum memutarnya .
kc ochibili
1
Sudahkah Anda mencoba apa yang Anda katakan? Saya punya dan tidak ada yang berhasil.
Malachiasz
apakah Anda mencoba mengubah nilai setelah memutar? saya tidak mengerti mengapa itu tidak berhasil. (jika Anda bertanya-tanya bagaimana Anda akan mengetahui nilai tinggi dan lebar sebelumnya setelah berputar, Anda dapat menyimpannya dalam variabel sebelum berputar dan kemudian menerapkannya setelah berputar.
kc ochibili
Versi baru perpustakaan ini ( stackoverflow.com/a/16589629/2075875 ) melakukan pekerjaan sebagaimana mestinya dan bekerja dari android 2.3 saat setRotation () tersedia sejak 3.0 jadi saya tidak ingin bermain dengan rotate lagi, tapi saya mendorong Anda untuk mencobanya sendiri dan menyajikan kode kerja.
Malachiasz
9

Solusi saya adalah cukup menggunakan ViewPagerwidget. Ini tidak terkunci di pusat karena Gallerydan memiliki fitur bawaan untuk mendaur ulang tampilan (sebagai ListView). Anda mungkin melihat pendekatan serupa di aplikasi Google Play, setiap kali Anda berurusan dengan daftar yang dapat digulir secara horizontal.

Anda hanya perlu memperpanjang PagerAdapterdan melakukan beberapa penyesuaian di sana:

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

Akibatnya, Anda akan memiliki widget yang dapat digulir secara horizontal dengan adaptor, seperti ini: masukkan deskripsi gambar di sini

fraggjkee
sumber
3
itu dapat digulir seperti ListView, tetapi dalam arah horizontal. Satu-satunya perbedaan yang saya lihat: item bergulir satu per satu, jadi tidak mungkin untuk menggulir ke suatu tempat di tengah item berikutnya. Tapi begitulah cara kerja ViewPager.
fraggjkee
8

Catatan: Android sekarang mendukung tampilan daftar horizontal menggunakan RecyclerView, jadi sekarang jawaban ini sudah usang, untuk informasi tentang RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView

Saya telah mengembangkan logika untuk melakukannya tanpa menggunakan pustaka scrollview horizontal eksternal, berikut adalah tampilan horizontal yang saya capai dan saya telah memposting jawaban saya di sini: https://stackoverflow.com/a/33301582/5479863

Respons json saya adalah ini:

{"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 tata letak:

    <?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 kelas:

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

Trik yang berfungsi di sini adalah id yang telah saya tetapkan untuk ImageView "imgView.setId (v)" dan setelah itu menerapkan onClickListener untuk itu saya kembali mengambil id tampilan .... Saya juga berkomentar di dalam kode sehingga yang mudah dimengerti, saya harap ini mungkin sangat berguna ... Selamat Coding ... :)

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

Abdul Aziz
sumber
1
Saya telah mengedit dan memposting penjelasan lengkap di sini, terima kasih atas sarannya :)
Abdul Aziz
Halo terima kasih untuk kode Anda, bisakah Anda memposting metode ini getPixelsToDP()?
Skizo-ozᴉʞS
@ Skizo Saya telah menambahkan metode itu pada akhir kode java, lihat
Abdul Aziz
6

Ini bukan jawaban yang bagus, tetapi bagaimana dengan menggunakan Tampilan Gulir Horisontal ?

Faisal
sumber
3
Berhasil. Tetapi jika saya memiliki sejumlah besar item maka tidak dapat menggunakan jenis adaptor barang dan acara klik.
Praveen
5

Anda dapat menggunakan RecyclerView di perpustakaan dukungan. RecyclerView adalah versi umum ListView yang mendukung:

  • Manajer tata letak untuk penentuan posisi item
  • Animasi default untuk operasi item umum

Android Recycler Lihat Documents

mobileideafactory.com
sumber
Ini adalah jawaban sebenarnya pada tanggal yang terlambat ini. Tetapi bahkan ini belum siap dan masih dalam 'pratinjau'
Martin
3

Saya telah melakukan banyak pencarian solusi untuk masalah ini. Jawaban singkatnya adalah, tidak ada solusi yang baik, tanpa mengesampingkan metode pribadi dan hal semacam itu. Hal terbaik yang saya temukan adalah menerapkannya sendiri dari awal dengan memperluas AdapterView. Ini sangat menyedihkan. Lihat pertanyaan SO saya tentang ListViews horisontal .

Neil Traft
sumber
Sayangnya jawaban Anda adalah yang benar. Bahkan Google mengonfirmasi bahwa satu-satunya cara untuk tampilan daftar horizontal adalah Galeri. Tapi Galeri tidak sama dengan tampilan daftar horizontal. Apakah Anda bersedia membagikan kode Anda? Apakah Anda mendaur ulang tampilan?
Patrick Boos
1
Sayangnya kode ini ditulis untuk perusahaan saya jadi karena itu milik. Namun, saya berharap menemukan waktu luang dalam beberapa bulan mendatang untuk menulis ulang (implementasi asli sangat tidak stabil) dan merilisnya ke domain publik. Saya juga dapat memberi tahu Anda bahwa saya mulai dengan mengambil demo ini dari Sony Ericsson, mengubah semua 'x' menjadi 'y' dan semua 'lebar' menjadi 'tinggi'. Lalu saya menghapus transformasi 3D dan menambahkan perilaku berhenti-di-akhir.
Neil Traft
@Neil Traft, bagaimana Anda memperbaiki posisi item? Dan bagaimana dengan berhenti pada akhirnya?
Adrian Magdas
Jujur saja, itu hanya dugaan saja. Butuh waktu lama untuk memperbaikinya, dan saya yakin ada cara yang lebih baik. Tetapi premis dasarnya adalah, dalam fillListDown()metode ini, Anda perlu melacak tepi bawah item daftar terakhir. Tapi Anda tidak tahu di mana ujung itu sampai Anda benar-benar membuat item terakhir (adapter.getCount () - 1). Jadi Anda menunggu sampai item itu dibuat dan kemudian Anda dapat menyimpan lokasi tepi. Setelah Anda tahu itu, Anda dapat memastikan bahwa mListTop tidak pernah kurang dari 0 dan tidak pernah lebih dari ketinggian daftar.
Neil Traft
1
Jika Anda tidak benar-benar, benar-benar, TIDAK MEMBUTUHKAN daftar horizontal, saya SANGAT mendorong Anda untuk menyerah, atau menggunakan Galeri.
Neil Traft
3

Saya harus melakukan hal yang sama untuk salah satu proyek saya dan akhirnya saya menulis sendiri juga. Saya menyebutnya HorzListView sekarang bagian dari perpustakaan open source Aniqroid saya .

http://aniqroid.sileria.com/doc/api/ (Cari unduhan di bagian bawah atau gunakan proyek kode google untuk melihat lebih banyak opsi unduhan: http://code.google.com/p/aniqroid/downloads/list )

Dokumentasi kelas ada di sini: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html

Sileria
sumber
Bagaimana cara mengatur posisi gulir secara terprogram?
Dima Portenko
Metode setSelection () ada tetapi mungkin tidak 100% diimplementasikan. Cobalah.
Sileria
1

Untuk aplikasi saya, saya menggunakan HorizontalScrollView yang berisi LinearLayout di dalamnya, yang orientasinya diatur ke horizontal. Untuk menambahkan gambar di dalamnya, saya membuat ImageViews di dalam aktivitas dan menambahkannya ke LinearLayout saya. Sebagai contoh:

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

Ini berfungsi dengan baik bagiku. Dalam aktivitas yang harus saya lakukan adalah sesuatu seperti kode di bawah ini:

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

Seperti yang saya katakan itu bekerja untuk saya, dan saya harap ini membantu seseorang yang ingin mencapai ini juga.

Jorge Cespedes
sumber
0

baik Anda selalu dapat membuat tampilan teks Anda dll secara dinamis dan mengatur onclicklisteners Anda seperti yang akan Anda lakukan dengan adaptor

lemah
sumber
maksud kamu apa? aku tidak bisa menangkapmu? tolong kirim cuplikan kode tentang ide Anda?
Praveen
tolong beri tahu saya tujuan dari "listview horisontal" apakah akan memiliki tampilan yang kompleks / multi? mis. 2 kotak teks 1 progressbar? atau katakan saja teks biasa? Apakah Anda memiliki sejumlah elemen tetap di dalam tampilan itu atau Anda ingin mengubahnya secara dinamis? Jawab saya ini dan saya akan dapat membantu Anda dengan kode
Lemah
saya ingin melakukan galeri teks horizontal. tetapi item yang dipilih datang ke pusat sebagai default. Saya ingin menjadi item yang dipilih harus di mana saya mengklik itu. silakan juga periksa posting saya: stackoverflow.com/questions/3237566/text-gallery-on-android dan stackoverflow.com/questions/3318617/…
Praveen
0

HorizontialListView tidak dapat berfungsi saat data dalam adaptor terlibat di utas lainnya. Semuanya berjalan 100% pada utas UI. Ini adalah masalah besar di multithread. Saya pikir menggunakan HorizontialListView bukan solusi terbaik untuk masalah Anda. HolzListView adalah cara yang lebih baik. Anda hanya perlu mengganti Galeri sebelumnya dengan HorzListView. Anda tidak perlu mengubah kode tentang adaptor. Kemudian semuanya berjalan sesuai harapan Anda. Lihat https: // stackoverflow.com/a/12339708/1525777 tentang HorzListView.

Europa
sumber
0

Saya telah menggunakan tautan listview horizontal dalam proyek saya & saya mendapat hasil yang baik. Saya telah menggunakan perpustakaan devsmart pada awalnya tetapi itu memberi saya beberapa masalah. Jadi cara terbaik untuk menggunakan tautan listview horizontal karena memulihkan masalah saya & saya juga baru-baru ini meluncurkan aplikasi saya di Google PlayStore menggunakan perpustakaan ini & mendapat tanggapan baik dari pengguna. Jadi saya sarankan Anda untuk menggunakan perpustakaan yang sama yang saya sebutkan di atas untuk menampilkan tampilan daftar secara horizontal. Nikmati :)

Harimau
sumber
0

Ada perpustakaan yang hebat untuk itu, yang disebut TwoWayView , sangat mudah diimplementasikan, cukup sertakan perpustakaan proyek ke dalam ruang kerja Anda dan tambahkan sebagai proyek perpustakaan ke proyek asli Anda, dan kemudian ikuti langkah-langkah berikut yang awalnya disebutkan di sini :

Pertama, mari kita tambahkan gaya yang menunjukkan orientasi ListView (horizontal atau vertikal) di (res / values ​​/ styles.xml):

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

Kemudian,

Di Layout XML Anda, gunakan kode berikut untuk menambahkan 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" />

dan akhirnya, cukup deklarasikan dan tangani seperti biasa ListView:

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

Semua metode ListViewakan bekerja di sini seperti biasa, tetapi hanya ada satu perbedaan yang saya perhatikan, yaitu ketika mengatur mode pilihan, metode setChoiceModetidak mengambil intnilai tetapi nilai dari yang enumdipanggil ChoiceMode, demikian list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);juga halnya lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE.

Muhammed Refaat
sumber
1
Saya mencoba ini - tetapi itu tidak akan memungkinkan saya untuk menggunakan ArrayAdapter saya sendiri <PreviewImage>
DeNitE Appz
-1

Anda dapat menggunakan ViewFlipper untuk memasukkan tata letak XML dan menambahkan gambar, tampilan daftar untuk setiap tata letak XML

Raju yourPepe
sumber