Pelaksanaan berbilang susun atur Item ListView


Pengenalan kepada bahagian ini:

Bahagian ini ialah bahagian terakhir bahagian ListView Ia membawakan anda pelaksanaan Item berbilang susun atur ListView. Apakah itu susun atur berbilang Item ListView? Contohnya, senarai sembang QQ:

1.png

Jika ia dibuat dengan ListView, maka terdapat dua jenis item ListView Berbeza! Satu kiri dan satu kanan, hey, bahagian ini akan mengajar anda cara melaksanakan berbilang susun atur ListView!


1 Perkara utama:

Tulis semula kaedah getItemViewType() untuk sepadan dengan kategori mana Pandangan itu, dan kaedah getViewTypeCount() iew kembalikan Berapa banyak kategori yang ada secara keseluruhan! Kemudian panggil getItemViewType pada getView untuk mendapatkan kategori yang sepadan, dan kemudian muatkan Paparan yang sepadan!


2. Pelaksanaan kod:

Di sini, gunakan dua reka letak daripada bahagian sebelumnya secara langsung, dan kemudian tulis Penyesuai lain untuk menulis semula beberapa perkara utama . Beberapa tempat:


MutiLayoutAdapter.java:

/**
 * Dibuat oleh Jay pada 2015/9/23 0023.
 */
kelas awam MutiLayoutAdapter melanjutkan BaseAdapter{

    //定义两个类别标応 <   final BOOK 🎜> private static final int TYPE_APP = 1;
    pribadi Context mContext;
    private ArrayList<Object> mData = null;


    public MutiLayoutAdapter(Context mContext, ArrayList<Object> mData) {
        this.mContext = mContext> D atas;      = Data 🎜>    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override <  temlic> (int Object<  public>  >         return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return  >     position        return  >                                       balik多布局的核心,通过这个判断类别
    @Override
    public int getItemViewType(int position) {
   dari     atas) {
         atas >            kembali TYPE_APP;
        } lain jika (mdata.get (kedudukan) contoh buku) { return type_book;
} else {
return super.getItemViewType (position);
}
}
//类别数目
    @Override
    public int getViewTypeCount() {
        kembali 2;
     }
<🎜 >< 🎜> 
    public View GetView (kedudukan int, Lihat ConvertView, ViewGroup Parent) { int type = getItemViewType (position);
viewHolder1 holder1 = null;
holdholder2 holder2 = null; ! LayoutInflater.from(mContext).inflate(R.layout.item_one, parent, false) ;
                   pemegang1.img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
               (    View 1.txt_aname _nama);
                    convertView.setTag( R.id.Tag_APP,holder1);
                   break;
                  BUKU_JENIS:
               pecah;           convertView = LayoutInflater.from(mContext).inflate(R.layout.item_two, induk, salah);
                   pemegang2.txt_bname = (TextView) convertView.findViewById(R.id.txt_bname);
                                             view view R.id.txt_bauthor);
convertView.setTag(R.id.Tag_Book,holder2);
                   break; }
} else {
switch (type) {
case type_app:
holder1 = (viewHolder1) convertView.gettag (r.id.tag_app);
                 case TYPE_BOOK:
                    holder2 = (ViewHolder2) convertView.getTag(R.id.Tag_Book);
                                                                             }
        }

        Object obj = mData.get (kedudukan);
        //设置下控件的值
        suis (jenis){
            kes JENIS_Apl:
                                   🎜>                 jika(apl != null){
                    pemegang1.img_icon.setImageResource(app.getaIcon());
                     pemegang1.txt_aname.setText                                             🎜>                rehat;
            kes BUKU_JENIS:
Buku buku = (Buku) obj;
                 jika(buku != null){
holder2.txt_bname.setText(book.getbName());
holder2.txt_bauthor.setText(book.getbAuthor());
}
break ;
}
return convertView;
}


//Dua ViewHolder berbeza
kelas statik peribadi ViewHolder1{
ImageView img_icon;
TextView txt_aname;
}

kelas statik peribadi ViewHolder2 {
TextView txt_bname;
TextView txt_bauthor;
}
}

Ada sesuatu yang perlu diberi perhatian di sini, convertView.setTag(R.id . Tag_APP, pemegang1); Kami biasanya secara langsung setTag(Objek), ini ialah kaedah setTag yang terlebih beban, parameternya ialah kunci unik dan objek selepasnya! sahaja! ! ! Saya secara langsung menggunakan TYPE_BOOK sebagai parameter pertama pada mulanya, dan kemudian melaporkan ralat berikut:

2.png

Kunci mestilah id sumber khusus aplikasiIaitu, yang sebelumnya mestilah unik Menentukan pembolehubah int jenis akhir dan pengekodan keras nilai tidak akan berfungsi. Pendekatan di sini adalah untuk menambah terus dalam rentetan.xml:

<item name="Tag_APP" type="id"></item>
<item name="Tag_Book" type="id"></item>

Sudah tentu anda juga boleh mencipta fail id.xml lain di bawah res/values/ dan tampal kod di atas! Di samping itu, terdapat satu lagi perkara yang perlu diperhatikan, iaitu, tanda-tanda yang membezakan kategori mesti bermula dari 0, jika tidak perkara berikut akan dilaporkan: Ralat seperti ini

3.png


MainActivity.java:

MainActivity kelas awam meluaskan appcompatactivity {

int static final int jenis_book = 0; Objek> mData = null;
    pribadi MutiLayoutAdapter myAdapter = null;

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

        //数据准备:
        mData = new ArrayList<Object>();
        =  ;                                   ++           suis ((int)(Math.random() * 2)){
                huruf JENIS_BUKU:
                     mData.add( Buku baharu("《灬䣀) 🎜> putus;
                kes JENIS_APP:
                    mData.add(Apl baharu(R.mipmap.iv_icon_baidu,"         ;       );      );
            }
        }

        list_content = (ListView) findViewById(R.id.list_content);
        myAdapter = new MutiLayoutAdapter(MainActivity.this,mData);
        list_content.set Adapter); 
 <🎜 🎜>

Di atas menjana 0 dan 1 secara rawak, 0 menambah objek Buku pada koleksi, dan 1 menambah objek Apl!


3. Muat turun kod:

ListViewDemo6.zip


Ringkasan bahagian ini:

Baiklah, bahagian ini Saya menerangkan kepada anda pelaksanaan berbilang susun atur Item ListView, yang merupakan penulisan semula dua kaedah. Kemudian getView() membuat pertimbangan dan menetapkan reka letak yang berbeza~Kod ini sangat mudah~

Ini menyimpulkan pengetahuan tentang ListView Sudah tentu, pengetahuan tentang ListView tidak terhad kepada ini. Pemuatan tak segerak, pengoptimuman, dsb., kami akan mempelajarinya di bahagian lanjutan~ Itu sahaja, terima kasih~