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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >由于之前發了篇「[BaseRecyclerAdapter之添加不同布局(頭部尾部)](http://www.jianshu.com/p/9d75c22f0964)」收到了以下反饋,在此非常感謝,寶貴建議!希望加群多多提建議,讓這個項目更加好用,幫助到更多人。 >>目前已優化:「[GitHub源碼地址](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)」 ![讀者反饋](http://upload-images.jianshu.io/upload_images/972352-0bea9948c3a742b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) #效果如何? 優化前: ``` public class MultipleItemAdapter extends BaseQuickAdapter<String> { private final int TEXT_TYPE = 1; private int mTextLayoutResId; public MultipleItemAdapter(Context context, List data, int... layoutResId) { super(context, layoutResId[0], data); mTextLayoutResId = layoutResId[1]; } @Override protected int getDefItemViewType(int position) { if (position % 2 == 0) return TEXT_TYPE; return super.getDefItemViewType(position); } @Override protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { if (viewType == TEXT_TYPE) return new TextViewHolder(getItemView(mTextLayoutResId, parent)); return super.onCreateDefViewHolder(parent, viewType); } @Override protected void onBindDefViewHolder(BaseViewHolder holder, String item) { if (holder instanceof TextViewHolder) holder.setText(R.id.tv, item); } @Override protected void convert(BaseViewHolder helper, String item) { helper.setImageUrl(R.id.iv, item); } public class TextViewHolder extends BaseViewHolder { public TextViewHolder(View itemView) { super(itemView.getContext(), itemView); } } } ``` 優化后(瘦身二分之一): ``` public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem> { public MultipleItemQuickAdapter(Context context, List data) { super(context, data); addItmeType(MultipleItem.TEXT, R.layout.text_view); addItmeType(MultipleItem.IMG, R.layout.image_view); } @Override protected void convert(BaseViewHolder helper, MultipleItem item) { switch (helper.getItemViewType()) { case MultipleItem.TEXT: helper.setImageUrl(R.id.tv, item.getContent()); break; case MultipleItem.IMG: helper.setImageUrl(R.id.iv, item.getContent()); break; } } } ``` #原理分析 由于上篇說了寫多個不同類型的布局一定會用到```getItemViewType```和```onCreateViewHolder```方法,但是在優化后的代碼中沒看到,怎么做的到呢? 優化前:```getDefItemViewType``` ``` protected int getDefItemViewType(int position) { if (position % 2 == 0) return TEXT_TYPE; return super.getDefItemViewType(position); } ``` 優化后不用寫:```getDefItemViewType```,看看基類的處理 ``` @Overrideprotected int getDefItemViewType(int position) { return mData.get(position).getItemType(); } ``` 原理分析:**在填充數據的時候就把view type給添加進去了。** --- 優化前:```onCreateDefViewHolder``` ``` @Override protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { if (viewType == TEXT_TYPE) return new TextViewHolder(getItemView(mTextLayoutResId, parent)); return super.onCreateDefViewHolder(parent, viewType); } ``` 優化后不用寫:```onCreateDefViewHolder```,看看基類的處理 ``` private SparseArray<Integer> layouts; protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { int layoutId = getLayoutId(viewType); View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); return new BaseViewHolder(mContext, view); } private int getLayoutId(int viewType) { return layouts.get(viewType);} protected void addItmeType(int type, int layoutResId) { if (layouts == null) { layouts = new SparseArray<>(); } layouts.put(type, layoutResId); } ``` 原理分析:**```addItmeType```以type為鍵以layoutResId為值存儲到的SparseArray里面,在```onCreateDefViewHolder```根據viewType來獲取相應的layoutResId。** >每次收獲一點點,后續還會擴展更多功能,供大家使用及學習「[BaseRecyclerViewAdapterHelper](http://blog.csdn.net/cym492224103/article/details/51171802)」。
                  <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>

                              哎呀哎呀视频在线观看