<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 本節引言: > 本節是ListView這個小節的最后一節,給大家帶來的是ListView多布局Item的實現, 何為ListView Item多布局,打個比方,QQ這種聊天列表: > > ![](https://box.kancloud.cn/2015-12-01_565da64710a33.png) > > 假如他是用一個ListView做的,那么一個ListView上不就有兩種不同的Item咯! 一左一右,嘿嘿,本節就來教大家如何實現ListView的多布局! * * * ## 1.要點講解: > 重寫getItemViewType()方法對應View是哪個類別,以及getViewTypeCount()方法iew返回 總共多少個類別!然后再getView那里調用getItemViewType獲得對應類別,再加載對應的View! * * * ## 2.代碼實現: > 這里的話直接用上一節的兩個布局,然后另外寫一個Adapter重寫要點中的幾個幾個地方: * * * **MutiLayoutAdapter.java**: ~~~ /** * Created by Jay on 2015/9/23 0023. */ public class MutiLayoutAdapter extends BaseAdapter{ //定義兩個類別標志 private static final int TYPE_BOOK = 0; private static final int TYPE_APP = 1; private Context mContext; private ArrayList<Object> mData = null; public MutiLayoutAdapter(Context mContext,ArrayList<Object> mData) { this.mContext = mContext; this.mData = mData; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } //多布局的核心,通過這個判斷類別 @Override public int getItemViewType(int position) { if (mData.get(position) instanceof App) { return TYPE_APP; } else if (mData.get(position) instanceof Book) { return TYPE_BOOK; } else { return super.getItemViewType(position); } } //類別數目 @Override public int getViewTypeCount() { return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); ViewHolder1 holder1 = null; ViewHolder2 holder2 = null; if(convertView == null){ switch (type){ case TYPE_APP: holder1 = new ViewHolder1(); convertView = LayoutInflater.from(mContext).inflate(R.layout.item_one, parent, false); holder1.img_icon = (ImageView) convertView.findViewById(R.id.img_icon); holder1.txt_aname = (TextView) convertView.findViewById(R.id.txt_aname); convertView.setTag(R.id.Tag_APP,holder1); break; case TYPE_BOOK: holder2 = new ViewHolder2(); convertView = LayoutInflater.from(mContext).inflate(R.layout.item_two, parent, false); holder2.txt_bname = (TextView) convertView.findViewById(R.id.txt_bname); holder2.txt_bauthor = (TextView) convertView.findViewById(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); break; case TYPE_BOOK: holder2 = (ViewHolder2) convertView.getTag(R.id.Tag_Book); break; } } Object obj = mData.get(position); //設置下控件的值 switch (type){ case TYPE_APP: App app = (App) obj; if(app != null){ holder1.img_icon.setImageResource(app.getaIcon()); holder1.txt_aname.setText(app.getaName()); } break; case TYPE_BOOK: Book book = (Book) obj; if(book != null){ holder2.txt_bname.setText(book.getbName()); holder2.txt_bauthor.setText(book.getbAuthor()); } break; } return convertView; } //兩個不同的ViewHolder private static class ViewHolder1{ ImageView img_icon; TextView txt_aname; } private static class ViewHolder2{ TextView txt_bname; TextView txt_bauthor; } } ~~~ > 這里有個地方要注意的,convertView.setTag(R.id.Tag_APP,holder1);我們平時都直接 setTag(Object)的,這個是setTag的重載方法,參數是一個唯一的key以及后面的一個對象! 唯一!!!我一開始直接把TYPE_BOOK作為第一個參數,然后就報下面這個錯誤: > > ![](https://box.kancloud.cn/2015-12-01_565da647292b6.png) > > **The key must be an application-specific resource id**?就是前面這個要唯一,定義一個final類型的int變量和硬編碼一個值的方式都是行不通的 這里的做法是直接在strings.xml中添加: ~~~ <item name="Tag_APP" type="id"></item> <item name="Tag_Book" type="id"></item> ~~~ > 當然你也可以在res/values/下另外創建一個ids.xml文件,把上面這段代碼貼上去! 除了這個還有一個要注意的地方,就是這個區分類別的標志要從0開始算,不然會報下面 這樣的錯誤: > > ![](https://box.kancloud.cn/2015-12-01_565da64736bed.jpg) * * * **MainActivity.java**: ~~~ public class MainActivity extends AppCompatActivity { private static final int TYPE_BOOK = 0; private static final int TYPE_APP = 1; private ListView list_content; private ArrayList<Object> mData = null; private MutiLayoutAdapter myAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //數據準備: mData = new ArrayList<Object>(); for(int i = 0;i < 20;i++){ switch ((int)(Math.random() * 2)){ case TYPE_BOOK: mData.add(new Book("《第一行代碼》","郭霖")); break; case TYPE_APP: mData.add(new App(R.mipmap.iv_icon_baidu,"百度")); break; } } list_content = (ListView) findViewById(R.id.list_content); myAdapter = new MutiLayoutAdapter(MainActivity.this,mData); list_content.setAdapter(myAdapter); } } ~~~ 上面隨機生成0和1,0就往集合中添加一個Book的對象,1的話就添加一個App的對象! * * * ## 3.代碼下載: [ListViewDemo6.zip](http://www.runoob.com/try/download/ListViewDemo6.zip) * * * ## 本節小結: > 好的,本節給大家講解了ListView Item多布局的實現,就是兩個方法的重寫, 然后getView()做下判斷,設置不同的布局而已~代碼非常簡單~ > > 關于ListView的知識就告一段落吧,當然ListView的知識并不止這些, 異步加載,優化等等,這些我們都會在進階部分進行學習~就說這么多,謝謝~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看