中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

重點建設(shè)政協(xié)網(wǎng)站百度推廣公司

重點建設(shè)政協(xié)網(wǎng)站,百度推廣公司,臨沂網(wǎng)站排名,wordpress 目錄 模板報錯截圖:場景介紹:在使用recycleView 自動遞增數(shù)據(jù),且自動滾動到最新行; 當(dāng)數(shù)據(jù)達到273條 時出現(xiàn)ANR;項目中 全部的列表適配器使用的三方庫:BaseRecyclerViewAdapterHelper (很早之前的項目&am…

報錯截圖:

場景介紹:在使用recycleView 自動遞增數(shù)據(jù),且自動滾動到最新行; 當(dāng)數(shù)據(jù)達到273條 時出現(xiàn)ANR;

項目中 全部的列表適配器使用的三方庫:BaseRecyclerViewAdapterHelper (很早之前的項目)

代碼:

public class LogRecyclerViewAdapter extends BaseQuickAdapter<LogBean,BaseViewHolder> {public LogRecyclerViewAdapter(int layoutResId, @Nullable List<LogBean> data) {super(layoutResId, data);}// 避免布局錯亂@Overridepublic int getItemViewType(int position) {Log.d(TAG, "getItemViewType1111: " +position);return position;}@Overrideprotected void convert(BaseViewHolder helper, LogBean item) {String title = item.getTitle();String msg = item.getMsg();helper.setText(R.id.log_title_txt,title);helper.setText(R.id.log_msg_txt,msg);// 設(shè)置異常字體顏色if(msg.contains("異常")||msg.contains("中斷")||msg.contains("失敗")){helper.setTextColor(R.id.log_title_txt,Color.parseColor("#FF2C00"));helper.setTextColor(R.id.log_msg_txt, Color.parseColor("#FF2C00"));}}
}

解決 :根據(jù)報錯提示,百度后解決 需要注釋掉重寫的getItemViewType 函數(shù),其實是一個三方庫的bug;

可參考:https://blog.csdn.net/lovelixue/article/details/103641023

為知其所以然 ,繼續(xù)跟蹤代碼;

進入適配器繼承的父類:BaseQuickAdapter該類繼承自RecyclerView.Adapter<K> , 找到重寫的getItemViewType 函數(shù),getItemViewType的返回值 當(dāng)有其他布局(頭部腳部或空布局)時候返回值各自的常量;項目只是單item 沒有添加其他View 代碼會走

return getDefItemViewType(adjPosition);

該方法會重新定義getItemViewType的值而該值是position變量;

  @Overridepublic int getItemViewType(int position) {if (getEmptyViewCount() == 1) {boolean header = mHeadAndEmptyEnable && getHeaderLayoutCount() != 0;switch (position) {case 0:if (header) {return HEADER_VIEW;} else {return EMPTY_VIEW;}case 1:if (header) {return EMPTY_VIEW;} else {return FOOTER_VIEW;}case 2:return FOOTER_VIEW;default:return EMPTY_VIEW;}}int numHeaders = getHeaderLayoutCount();if (position < numHeaders) {return HEADER_VIEW;} else {int adjPosition = position - numHeaders;int adapterCount = mData.size();if (adjPosition < adapterCount) {return getDefItemViewType(adjPosition);} else {adjPosition = adjPosition - adapterCount;int numFooters = getFooterLayoutCount();if (adjPosition < numFooters) {return FOOTER_VIEW;} else {return LOADING_VIEW;}}}}protected int getDefItemViewType(int position) {if (mMultiTypeDelegate != null) {return mMultiTypeDelegate.getDefItemViewType(mData, position);}return super.getItemViewType(position);}

回到:LogRecyclerViewAdapter 類中 ,業(yè)務(wù)代碼在convert函數(shù)中實現(xiàn) 跟蹤該函數(shù),發(fā)現(xiàn)在BaseQuickAdapter中被onBindViewHolder調(diào)用,代碼如下:它會獲取holder的getItemViewType ,其值的已經(jīng)分析過 取自position ,每次源數(shù)據(jù)新增一條position就會隨之遞增;其實報錯的時候,還沒有執(zhí)行到該函數(shù),我們需要查看recycleView的源碼 執(zhí)行該方法之前還執(zhí)行了onCreateViewHolder 函數(shù)。

 @Overridepublic void onBindViewHolder(K holder, int position) {//Add up fetch logic, almost like load more, but simpler.autoUpFetch(position);//Do not move position, need to change before LoadMoreView bindingautoLoadMore(position);int viewType = holder.getItemViewType();switch (viewType) {case 0:convert(holder, getItem(position - getHeaderLayoutCount()));break;case LOADING_VIEW:mLoadMoreView.convert(holder);break;case HEADER_VIEW:break;case EMPTY_VIEW:break;case FOOTER_VIEW:break;default:convert(holder, getItem(position - getHeaderLayoutCount()));break;}}

@Overridepublic K onCreateViewHolder(ViewGroup parent, int viewType) {K baseViewHolder = null;this.mContext = parent.getContext();this.mLayoutInflater = LayoutInflater.from(mContext);switch (viewType) {case LOADING_VIEW:baseViewHolder = getLoadingView(parent);break;case HEADER_VIEW:baseViewHolder = createBaseViewHolder(mHeaderLayout);break;case EMPTY_VIEW:baseViewHolder = createBaseViewHolder(mEmptyLayout);break;case FOOTER_VIEW:baseViewHolder = createBaseViewHolder(mFooterLayout);break;default:baseViewHolder = onCreateDefViewHolder(parent, viewType);bindViewClickListener(baseViewHolder);}baseViewHolder.setAdapter(this);return baseViewHolder;}

重點看下,switch 方法 ,會逐條遍歷viewType,我們分別看case 條件值 ,分別是

public static final int HEADER_VIEW = 0x00000111;

public static final int LOADING_VIEW = 0x00000222;

public static final int FOOTER_VIEW = 0x00000333;

public static final int EMPTY_VIEW = 0x00000555;

是十六進制的魔法數(shù)字 ,case ==0 正常調(diào)用 0x00000111 轉(zhuǎn)換成十進制是273 ,所以 當(dāng)position 的值273的 時候,會進入第二個條件執(zhí)行createBaseViewHolder (mHeaderLayout)此時的參數(shù)是null,

該函數(shù)表示通過反射的方式獲取viewhold

protected K createBaseViewHolder(View view) {Class temp = getClass();Class z = null;while (z == null && null != temp) {z = getInstancedGenericKClass(temp);temp = temp.getSuperclass();}K k;// 泛型擦除會導(dǎo)致z為nullif (z == null) {k = (K) new BaseViewHolder(view);} else {k = createGenericKInstance(z, view);}return k != null ? k : (K) new BaseViewHolder(view);}

進入BaseViewHolder 類中,該類繼承自RecyclerView.ViewHolder,作用是封裝了各種賦值函數(shù),通過getView 獲取到item的view 去賦值等。

 public ViewHolder(@NonNull View itemView) {if (itemView == null) {throw new IllegalArgumentException("itemView may not be null");}this.itemView = itemView;}

終于跟蹤到報錯的地方了。因為當(dāng)初入?yún)⑹莕ull 因此條件判斷進入itemView ==null ,就有了開始的IDE的輸出報錯;

完美的閉環(huán)

如有不完善的地方,譬如:recycleView源碼部分,沒有仔細說明,請多多擔(dān)待;

抱拳;

http://www.risenshineclean.com/news/28186.html

相關(guān)文章:

  • 轉(zhuǎn)播網(wǎng)站如何做鄭州seo顧問熱狗
  • 佛山做外貿(mào)網(wǎng)站哪家好商旅平臺app下載
  • 建行的官方網(wǎng)站武漢seo首頁優(yōu)化報價
  • aws搭建wordpress優(yōu)化網(wǎng)站建設(shè)seo
  • 北京模板開發(fā)建站網(wǎng)站如何做關(guān)鍵詞優(yōu)化
  • 網(wǎng)站建設(shè)包括哪些技術(shù)營業(yè)推廣策劃方案
  • 二手交易平臺的網(wǎng)站怎么做營銷平臺
  • 廣州白云做網(wǎng)站的公司網(wǎng)絡(luò)銷售怎么聊客戶
  • 邢臺哪兒做wap網(wǎng)站好建站軟件
  • 網(wǎng)站首頁只顯示域名seo關(guān)鍵詞優(yōu)化提高網(wǎng)站排名
  • 天津西青區(qū)疫情最新消息今天手機網(wǎng)站優(yōu)化排名
  • 簡述網(wǎng)站開發(fā)的幾個步驟搜索熱度和搜索人氣
  • 有做車身拉花的網(wǎng)站嗎seo學(xué)校
  • 做網(wǎng)站買什么筆記本好外鏈發(fā)布工具下載
  • 咖啡網(wǎng)站開發(fā)背景怎么寫微博指數(shù)查詢
  • 自己電腦做服務(wù)器發(fā)布網(wǎng)站電商營銷推廣有哪些?
  • 我自己做的網(wǎng)站打開很慢鄭州seo哪家好
  • 網(wǎng)站備案 視頻百度引流免費推廣怎么做
  • 設(shè)計一個網(wǎng)站西安發(fā)布最新通知
  • 網(wǎng)站開發(fā)發(fā)展前景seo推廣和百度推廣的區(qū)別
  • wordpress模板怎么添加菜單百度seo排名優(yōu)化教程
  • 如何做新政府網(wǎng)站欄目網(wǎng)站建設(shè)制作流程
  • 湖南省建設(shè)安監(jiān)局官網(wǎng)站朋友圈推廣文案
  • 全國建筑業(yè)四庫一平臺seo賺錢暴利
  • 河南鄭州網(wǎng)站推廣優(yōu)化淘寶優(yōu)化關(guān)鍵詞的步驟
  • 找人開發(fā)一個app多少錢網(wǎng)站建設(shè)排名優(yōu)化
  • 做公司網(wǎng)站需要多外包網(wǎng)絡(luò)推廣公司推廣網(wǎng)站
  • 網(wǎng)站后期運營方案步驟十大電商代運營公司
  • 是在百度中建設(shè)網(wǎng)站?百度的網(wǎng)頁地址
  • 如何搭建一個論壇網(wǎng)站黑帽seo技術(shù)培訓(xùn)