Skip to content

Commit 7e23922

Browse files
committed
下拉刷新改为SwipeRefreshLayout
1 parent 20beead commit 7e23922

File tree

2 files changed

+76
-28
lines changed

2 files changed

+76
-28
lines changed

android/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ dependencies {
3333
compile 'com.facebook.react:react-native:+'
3434
compile 'com.google.code.gson:gson:2.3.1'
3535

36+
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.3'
37+
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.3'
38+
//compile 'com.dinuscxj:recyclerrefreshlayout:2.0.5'
3639
compile 'com.google.zxing:core:3.3.0'
3740
compile 'com.github.bumptech.glide:glide:3.7.0'
3841
testCompile 'junit:junit:4.12'

android/src/main/java/cn/jiguang/imui/messagelist/ReactMsgListManager.java

Lines changed: 73 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import android.os.Build;
1313
import android.os.Handler;
1414
import android.os.Message;
15-
import android.support.v4.widget.SwipeRefreshLayout;
1615
import android.util.Log;
1716
import android.view.MotionEvent;
1817
import android.view.View;
@@ -43,6 +42,12 @@
4342
import com.popup.tool.PopupUtil;
4443
import com.popupmenu.NIMPopupMenu;
4544
import com.popupmenu.PopupMenuItem;
45+
import com.scwang.smartrefresh.header.WaterDropHeader;
46+
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
47+
import com.scwang.smartrefresh.layout.api.RefreshLayout;
48+
import com.scwang.smartrefresh.layout.header.BezierRadarHeader;
49+
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
50+
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
4651

4752
import java.io.File;
4853
import java.util.ArrayList;
@@ -61,7 +66,7 @@
6166
import static cn.jiguang.imui.messagelist.MessageUtil.configMessage;
6267

6368

64-
public class ReactMsgListManager extends ViewGroupManager<SwipeRefreshLayout> implements LifecycleEventListener {
69+
public class ReactMsgListManager extends ViewGroupManager<SmartRefreshLayout> implements LifecycleEventListener {
6570

6671
private static final String REACT_MESSAGE_LIST = "RCTMessageList";
6772
private static final String TAG = "RCTMessageList";
@@ -92,8 +97,16 @@ public class ReactMsgListManager extends ViewGroupManager<SwipeRefreshLayout> im
9297
private MsgListAdapter mAdapter;
9398
private ReactContext mContext;
9499
private MessageList msgList;
95-
private SwipeRefreshLayout swipeRefreshLayout;
96-
100+
private SmartRefreshLayout swipeRefreshLayout;
101+
static {
102+
ClassicsHeader.REFRESH_HEADER_PULLDOWN = "";
103+
ClassicsHeader.REFRESH_HEADER_REFRESHING = "";
104+
ClassicsHeader.REFRESH_HEADER_LOADING = "";
105+
ClassicsHeader.REFRESH_HEADER_RELEASE = "";
106+
ClassicsHeader.REFRESH_HEADER_FINISH = "";
107+
ClassicsHeader.REFRESH_HEADER_FAILED = "";
108+
ClassicsHeader.REFRESH_HEADER_LASTTIME = "";
109+
}
97110
@Override
98111
public String getName() {
99112
return REACT_MESSAGE_LIST;
@@ -102,7 +115,7 @@ public String getName() {
102115
@SuppressLint("ClickableViewAccessibility")
103116
@SuppressWarnings("unchecked")
104117
@Override
105-
protected SwipeRefreshLayout createViewInstance(final ThemedReactContext reactContext) {
118+
protected SmartRefreshLayout createViewInstance(final ThemedReactContext reactContext) {
106119
Log.w(TAG, "createViewInstance");
107120
IntentFilter intentFilter = new IntentFilter();
108121
intentFilter.addAction(RCT_APPEND_MESSAGES_ACTION);
@@ -118,7 +131,33 @@ protected SwipeRefreshLayout createViewInstance(final ThemedReactContext reactCo
118131
SessorUtil.getInstance(reactContext).register(true);
119132
mContext.registerReceiver(RCTMsgListReceiver, intentFilter);
120133

121-
swipeRefreshLayout = new SwipeRefreshLayout(reactContext);
134+
swipeRefreshLayout = new SmartRefreshLayout(reactContext){
135+
private final Runnable measureAndLayout = new Runnable() {
136+
137+
int width = 0;
138+
int height = 0;
139+
140+
@Override
141+
public void run() {
142+
143+
if (width == 0) {
144+
width = getWidth();
145+
}
146+
if (height == 0) {
147+
height = getHeight();
148+
}
149+
measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
150+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
151+
layout(getLeft(), getTop(), getRight(), getBottom());
152+
}
153+
};
154+
155+
@Override
156+
public void requestLayout() {
157+
super.requestLayout();
158+
post(measureAndLayout);
159+
}
160+
};
122161
msgList = new MessageList(reactContext, null);
123162
swipeRefreshLayout.addView(msgList);
124163

@@ -128,17 +167,23 @@ protected SwipeRefreshLayout createViewInstance(final ThemedReactContext reactCo
128167
public void handleMessage(Message msg) {
129168
switch (msg.what){
130169
case 1:
131-
swipeRefreshLayout.setRefreshing(false);
170+
swipeRefreshLayout.finishRefresh(true);
132171
break;
133172
}
134173
}
135174
};
136-
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.WHITE);
137-
swipeRefreshLayout.setColorSchemeColors(Color.BLUE,Color.GREEN,Color.YELLOW,Color.RED);
175+
// swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.WHITE);
176+
// swipeRefreshLayout.setColorSchemeColors(Color.BLUE,Color.GREEN,Color.YELLOW,Color.RED);
138177
// swipeRefreshLayout.setEnabled(false);
139-
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
178+
// swipeRefreshLayout.setRefreshStyle(SmartRefreshLayout.RefreshStyle.PINNED);
179+
SmartRefreshLayout refreshLayout = swipeRefreshLayout;
180+
181+
182+
WaterDropHeader header = new WaterDropHeader(reactContext);
183+
refreshLayout.setRefreshHeader(header);
184+
swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
140185
@Override
141-
public void onRefresh() {
186+
public void onRefresh(RefreshLayout refreshlayout) {
142187
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
143188
ON_PULL_TO_REFRESH_EVENT, null);
144189
handler.sendEmptyMessageDelayed(1,5000);
@@ -417,7 +462,7 @@ private static List<PopupMenuItem> getMoreMenuItems(Context context, String sess
417462
}
418463

419464
@ReactProp(name = "initList")
420-
public void setInitList(SwipeRefreshLayout messageList, ReadableArray messages) {
465+
public void setInitList(SmartRefreshLayout messageList, ReadableArray messages) {
421466

422467
mAdapter.clear();
423468
if (messages != null && messages.size() > 0) {
@@ -431,89 +476,89 @@ public void setInitList(SwipeRefreshLayout messageList, ReadableArray messages)
431476
}
432477

433478
@ReactProp(name = "sendBubble")
434-
public void setSendBubble(SwipeRefreshLayout messageList, ReadableMap map) {
479+
public void setSendBubble(SmartRefreshLayout messageList, ReadableMap map) {
435480
int resId = mContext.getResources().getIdentifier(map.getString("imageName"), "drawable", mContext.getPackageName());
436481
if (resId != 0) {
437482
msgList.setSendBubbleDrawable(resId);
438483
}
439484
}
440485

441486
@ReactProp(name = "receiveBubble")
442-
public void setReceiveBubble(SwipeRefreshLayout messageList, ReadableMap map) {
487+
public void setReceiveBubble(SmartRefreshLayout messageList, ReadableMap map) {
443488
int resId = mContext.getResources().getIdentifier(map.getString("imageName"), "drawable", mContext.getPackageName());
444489
if (resId != 0) {
445490
msgList.setReceiveBubbleDrawable(resId);
446491
}
447492
}
448493

449494
@ReactProp(name = "sendBubbleTextColor")
450-
public void setSendBubbleTextColor(SwipeRefreshLayout messageList, String color) {
495+
public void setSendBubbleTextColor(SmartRefreshLayout messageList, String color) {
451496
int colorRes = Color.parseColor(color);
452497
msgList.setSendBubbleTextColor(colorRes);
453498
}
454499

455500
@ReactProp(name = "receiveBubbleTextColor")
456-
public void setReceiveBubbleTextColor(SwipeRefreshLayout messageList, String color) {
501+
public void setReceiveBubbleTextColor(SmartRefreshLayout messageList, String color) {
457502
int colorRes = Color.parseColor(color);
458503
msgList.setReceiveBubbleTextColor(colorRes);
459504
}
460505

461506
@ReactProp(name = "sendBubbleTextSize")
462-
public void setSendBubbleTextSize(SwipeRefreshLayout messageList, int size) {
507+
public void setSendBubbleTextSize(SmartRefreshLayout messageList, int size) {
463508
msgList.setSendBubbleTextSize(size);
464509
}
465510

466511
@ReactProp(name = "receiveBubbleTextSize")
467-
public void setReceiveBubbleTextSize(SwipeRefreshLayout messageList, int size) {
512+
public void setReceiveBubbleTextSize(SmartRefreshLayout messageList, int size) {
468513
msgList.setReceiveBubbleTextSize(size);
469514
}
470515

471516
@ReactProp(name = "sendBubblePadding")
472-
public void setSendBubblePadding(SwipeRefreshLayout messageList, ReadableMap map) {
517+
public void setSendBubblePadding(SmartRefreshLayout messageList, ReadableMap map) {
473518
msgList.setSendBubblePaddingLeft(map.getInt("left"));
474519
msgList.setSendBubblePaddingTop(map.getInt("top"));
475520
msgList.setSendBubblePaddingRight(map.getInt("right"));
476521
msgList.setSendBubblePaddingBottom(map.getInt("bottom"));
477522
}
478523

479524
@ReactProp(name = "receiveBubblePadding")
480-
public void setReceiveBubblePaddingLeft(SwipeRefreshLayout messageList, ReadableMap map) {
525+
public void setReceiveBubblePaddingLeft(SmartRefreshLayout messageList, ReadableMap map) {
481526
msgList.setReceiveBubblePaddingLeft(map.getInt("left"));
482527
msgList.setReceiveBubblePaddingTop(map.getInt("top"));
483528
msgList.setReceiveBubblePaddingRight(map.getInt("right"));
484529
msgList.setReceiveBubblePaddingBottom(map.getInt("bottom"));
485530
}
486531

487532
@ReactProp(name = "dateTextSize")
488-
public void setDateTextSize(SwipeRefreshLayout messageList, int size) {
533+
public void setDateTextSize(SmartRefreshLayout messageList, int size) {
489534
msgList.setDateTextSize(size);
490535
}
491536

492537
@ReactProp(name = "dateTextColor")
493-
public void setDateTextColor(SwipeRefreshLayout messageList, String color) {
538+
public void setDateTextColor(SmartRefreshLayout messageList, String color) {
494539
int colorRes = Color.parseColor(color);
495540
msgList.setDateTextColor(colorRes);
496541
}
497542

498543
@ReactProp(name = "datePadding")
499-
public void setDatePadding(SwipeRefreshLayout messageList, int padding) {
544+
public void setDatePadding(SmartRefreshLayout messageList, int padding) {
500545
msgList.setDatePadding(padding);
501546
}
502547

503548
@ReactProp(name = "avatarSize")
504-
public void setAvatarWidth(SwipeRefreshLayout messageList, ReadableMap map) {
549+
public void setAvatarWidth(SmartRefreshLayout messageList, ReadableMap map) {
505550
msgList.setAvatarWidth(map.getInt("width"));
506551
msgList.setAvatarHeight(map.getInt("height"));
507552
}
508553

509554
/**
510555
* if showDisplayName equals 1, then show display name.
511556
*
512-
* @param messageList SwipeRefreshLayout
557+
* @param messageList SmartRefreshLayout
513558
* @param isShowDisplayName boolean
514559
*/
515560
@ReactProp(name = "isShowDisplayName")
516-
public void setShowDisplayName(SwipeRefreshLayout messageList, boolean isShowDisplayName) {
561+
public void setShowDisplayName(SmartRefreshLayout messageList, boolean isShowDisplayName) {
517562
if (isShowDisplayName) {
518563
msgList.setShowDisplayName(1);
519564
}
@@ -559,7 +604,7 @@ public void run() {
559604
});
560605
}
561606
} else if (intent.getAction().equals(RCT_INSERT_MESSAGES_ACTION)) {
562-
swipeRefreshLayout.setRefreshing(false);
607+
swipeRefreshLayout.finishRefresh(true);
563608
String[] messages = intent.getStringArrayExtra("messages");
564609
List<RCTMessage> list = new ArrayList<>();
565610
for (int i = messages.length - 1; i > -1; i--) {
@@ -605,7 +650,7 @@ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
605650
}
606651

607652
@Override
608-
public void onDropViewInstance(SwipeRefreshLayout view) {
653+
public void onDropViewInstance(SmartRefreshLayout view) {
609654
super.onDropViewInstance(view);
610655
Log.w(TAG, "onDropViewInstance");
611656
try {

0 commit comments

Comments
 (0)