私はリストビューをSwipeRefreshLayoutでラップしています。リストビューは非常にスムーズにレンダリングされ、いつでも新しいデータで更新されます。しかし、新しいメッセージを取得するためにSwipeRefreshLayoutをプルダウンするたびに、リストビューはユーザの経験の点でマイナスの点滅効果を与えます。私はこの問題を解決する方法を教えてもらえますか?以下はAndroid SwipeRefreshLayout瞬きのリストビューをリフレッシュ
は、私のコードの一部です:
public void fetchMoreMsgs(){
sizeOfChatLV=chatLVArray.size();
if(lvPos==0){
toast = Toast.makeText(ma,"No more messages",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
return;
}else {
if(lvPos-fetchStep>=0){
arrayList = chatLVArray.subList(lvPos-fetchStep, lvPos);
msgsList.addAll(0, arrayList);
chatLVArrayAdapter = new ChatLVArrayAdapter(ma, msgsList);
ma.chatListViewIMP2P.setAdapter(chatLVArrayAdapter);
ma.chatListViewIMP2P.setSelection(fetchStep);
lvPos-=fetchStep;
}else {
arrayList = chatLVArray.subList(0, lvPos);
msgsList.addAll(0, arrayList);
chatLVArrayAdapter = new ChatLVArrayAdapter(ma, msgsList);
ma.chatListViewIMP2P.setAdapter(chatLVArrayAdapter);
ma.chatListViewIMP2P.setSelection(lvPos);
lvPos=0;
}
}
}
私は(SwipeRefreshLayoutに包まれた)リストビューをプルダウンするときfetchMoreMsgsメソッドが呼び出されると、.ANYのヘルプははるかに高く評価されます!
私はnotifyDataSetChanged()を後で試します。これはより効率的です。しかし、SwipeRefreshLayoutの関与がない限り、他の状況ではsetAdapterは点滅効果を生成しません。これは、ViewListenerを使用しないArrayAdapterの実装によって引き起こされる可能性があります(私のリストは2種類の行を取りますが、ViewHolderに配置する方法はわかりません)。しかし、リストビューが他のケースでは点滅しない理由を説明することはまだ難しいです。 ます。public void onRefresh(){ 新しいスレッド(新しいRunnableを(){ @Override ます。public void実行(){ runOnUiThread(新しいRunnableを(){ ます。public void: – user1870797
は、私はこのようになります醜いソリューションを思いつきました実行(){ p2PTalkView.fetchMoreMsgs(); p2pSwipeRFL.setRefreshing(false); }}); }})。start(); } – user1870797
点滅は消えていますが、なぜ私はわかりません – user1870797