Gankly
基于干貨Api谎倔、妹子圖做的一個(gè)應(yīng)用。應(yīng)用包含干貨 androi 、ios 、妹子,其他還有幾個(gè)模塊,包括新鮮事(煎蛋)擒滑、科技資訊、團(tuán)隊(duì)博客叉弦,以及抓包獲取百思不得姐接口丐一,做了視頻跟給圖片這2個(gè)模塊。有興趣的朋友淹冰,可以訪問這個(gè)開源項(xiàng)目库车,如果有什么問題,可以留言樱拴,也可以聯(lián)系我柠衍。
項(xiàng)目地址: https://github.com/leftcoding/GankLy
寫這個(gè)文章的目的,因?yàn)樵谧鲞@個(gè)項(xiàng)目中晶乔,總會(huì)碰到一些問題珍坊。所以,我覺得有必要把自己碰到的問題正罢,解決問題的方法阵漏,寫在以后的文章中,讓其他碰到同樣問題的人,少走一些冤枉路履怯。
RecyclerView
這里不做描述了川无,相信百度一堆,可以直接百度下虑乖。這里說下碰到的問題懦趋。
如圖:
做下拉刷新的時(shí)候,刪除數(shù)據(jù)疹味,然后再重新添加數(shù)據(jù)仅叫,就會(huì)導(dǎo)致這個(gè)屏幕閃屏一下。代碼如下
Adapter
// 第一次添加數(shù)據(jù)
public void refillItems(List<ResultsBean> results) {
int size = mResults.size();
mResults.clear();
notifyItemRangeRemoved(0, size);
appendItems(results);
}
// 之后添加數(shù)據(jù)
public void appendItems(List<ResultsBean> results) {
mResults.addAll(results);
int size = mResults.size();
notifyItemRangeInserted(size, results.size());
}
后來經(jīng)過百度糙捺,得知應(yīng)用是recyclerview的動(dòng)畫效果诫咱,但是我沒有添加默認(rèn)動(dòng)畫,所以問題點(diǎn)洪灯,就不是這個(gè)了坎缭。
其實(shí)是recylerview沒有給每個(gè)item設(shè)置一個(gè)明確的id,這會(huì)導(dǎo)致不斷刷新情況下同樣序號(hào)返回的子控件是不一樣的签钩,這就會(huì)造成不知道把焦點(diǎn)給那個(gè)控件掏呼。但是如果用了 notifyInsert 不會(huì)出現(xiàn)這樣的問題。如果用了 notifyInsert 那么 notifyItemRangeInserted 的作用就發(fā)揮不出來铅檩。
Google 結(jié)果憎夷,在Adapter 初始化的時(shí)候,加上
public AndroidAdapter(Context context, int type) {
setHasStableIds(true);
mResults = new ArrayList<>();
mContext = context;
mLayout = type;
}
too young昧旨,to native #####
結(jié)果雖然不閃屏了拾给,但是某些Item會(huì)有重復(fù)的。
原來還要再復(fù)寫Adater的一個(gè)方法兔沃,返回唯一的id
@Override
public long getItemId(int position) {
return position;
}
這樣就完美解決問題蒋得。!
第一次寫文章乒疏,比較生疏额衙,之后還會(huì)把碰到的問題整合下,以文章的形式呈現(xiàn)給大家缰雇。