Skip to content

Commit a4dd7e2

Browse files
committed
fix 聊天界面滚动问题
1 parent 38d8c3a commit a4dd7e2

File tree

3 files changed

+52
-40
lines changed

3 files changed

+52
-40
lines changed

android/messagelist/src/main/java/cn/jiguang/imui/messages/MessageList.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private void parseStyle(Context context, AttributeSet attrs) {
4141
* @param adapter Adapter, extends MsgListAdapter.
4242
* @param <MESSAGE> Message model extends IMessage.
4343
*/
44-
public <MESSAGE extends IMessage> void setAdapter(MsgListAdapter<MESSAGE> adapter,int visibleThreshold) {
44+
public <MESSAGE extends IMessage> void setAdapter(MsgListAdapter<MESSAGE> adapter, int visibleThreshold) {
4545
// SimpleItemAnimator itemAnimator = new DefaultItemAnimator();
4646
// itemAnimator.setSupportsChangeAnimations(false);
4747
setItemAnimator(null);
@@ -203,12 +203,8 @@ public void setSendingIndeterminateDrawable(String drawableName, String packageN
203203
@Override
204204
public void run() {
205205

206-
if (width == 0) {
207-
width = getWidth();
208-
}
209-
if (height == 0) {
210-
height = getHeight();
211-
}
206+
width = getWidth();
207+
height = getHeight();
212208
measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
213209
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
214210
layout(getLeft(), getTop(), getRight(), getBottom());

android/messagelist/src/main/java/cn/jiguang/imui/messages/ScrollMoreListener.java

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cn.jiguang.imui.messages;
22

33

4+
import android.os.Handler;
5+
import android.os.Message;
46
import android.support.v7.widget.GridLayoutManager;
57
import android.support.v7.widget.LinearLayoutManager;
68
import android.support.v7.widget.RecyclerView;
@@ -39,26 +41,7 @@ private int getLastVisibleItem(int[] lastVisibleItemPositions) {
3941

4042
@Override
4143
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
42-
if (mLayoutManager instanceof LinearLayoutManager) {
43-
LinearLayoutManager ll = (LinearLayoutManager) mLayoutManager;
44-
if (ll.getStackFromEnd()) {
45-
if (ll.getChildCount() < mLayoutManager.getItemCount()) {
46-
try {
47-
ll.setStackFromEnd(false);
48-
} catch (Exception e) {
49-
e.printStackTrace();
50-
}
51-
}
52-
}else {
53-
if (ll.getChildCount() >= mLayoutManager.getItemCount()) {
54-
try {
55-
ll.setStackFromEnd(true);
56-
} catch (Exception e) {
57-
e.printStackTrace();
58-
}
59-
}
60-
}
61-
}
44+
handler.sendEmptyMessageDelayed(1,150);
6245
if (mListener != null) {
6346
int lastVisibleItemPosition = 0;
6447
int firstVisibleItemPosition = 0;
@@ -100,6 +83,38 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
10083
}
10184
}
10285

86+
Handler handler = new Handler() {
87+
@Override
88+
public void handleMessage(Message msg) {
89+
if (msg.what == 1) {
90+
setStackFromEnd();
91+
}
92+
}
93+
};
94+
95+
void setStackFromEnd() {
96+
if (mLayoutManager instanceof LinearLayoutManager) {
97+
LinearLayoutManager ll = (LinearLayoutManager) mLayoutManager;
98+
if (ll.getStackFromEnd()) {
99+
if (ll.getChildCount() < mLayoutManager.getItemCount()) {
100+
try {
101+
ll.setStackFromEnd(false);
102+
} catch (Exception e) {
103+
e.printStackTrace();
104+
}
105+
}
106+
} else {
107+
if (ll.getChildCount() >= mLayoutManager.getItemCount()) {
108+
try {
109+
ll.setStackFromEnd(true);
110+
} catch (Exception e) {
111+
e.printStackTrace();
112+
}
113+
}
114+
}
115+
}
116+
}
117+
103118
interface OnLoadMoreListener {
104119
void onLoadMore(int page, int total);
105120

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

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public class ReactMsgListManager extends ViewGroupManager<SmartRefreshLayout> im
9797
private ReactContext mContext;
9898
private MessageList msgList;
9999
private SmartRefreshLayout swipeRefreshLayout;
100+
100101
static {
101102
ClassicsHeader.REFRESH_HEADER_PULLDOWN = "";
102103
ClassicsHeader.REFRESH_HEADER_REFRESHING = "";
@@ -106,6 +107,7 @@ public class ReactMsgListManager extends ViewGroupManager<SmartRefreshLayout> im
106107
ClassicsHeader.REFRESH_HEADER_FAILED = "";
107108
ClassicsHeader.REFRESH_HEADER_LASTTIME = "";
108109
}
110+
109111
@Override
110112
public String getName() {
111113
return REACT_MESSAGE_LIST;
@@ -130,7 +132,7 @@ protected SmartRefreshLayout createViewInstance(final ThemedReactContext reactCo
130132
SessorUtil.getInstance(reactContext).register(true);
131133
mContext.registerReceiver(RCTMsgListReceiver, intentFilter);
132134

133-
swipeRefreshLayout = new SmartRefreshLayout(reactContext){
135+
swipeRefreshLayout = new SmartRefreshLayout(reactContext) {
134136
private final Runnable measureAndLayout = new Runnable() {
135137

136138
int width = 0;
@@ -139,12 +141,8 @@ protected SmartRefreshLayout createViewInstance(final ThemedReactContext reactCo
139141
@Override
140142
public void run() {
141143

142-
if (width == 0) {
143-
width = getWidth();
144-
}
145-
if (height == 0) {
146-
height = getHeight();
147-
}
144+
width = getWidth();
145+
height = getHeight();
148146
measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
149147
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
150148
layout(getLeft(), getTop(), getRight(), getBottom());
@@ -157,14 +155,15 @@ public void requestLayout() {
157155
post(measureAndLayout);
158156
}
159157
};
160-
msgList = new MessageList(reactContext, null);
158+
Activity activity = reactContext.getCurrentActivity();
159+
msgList = new MessageList(activity, null);
161160
swipeRefreshLayout.addView(msgList);
162161

163-
final Handler handler = new Handler(){
162+
final Handler handler = new Handler() {
164163

165164
@Override
166165
public void handleMessage(Message msg) {
167-
switch (msg.what){
166+
switch (msg.what) {
168167
case 1:
169168
swipeRefreshLayout.finishRefresh(true);
170169
break;
@@ -185,7 +184,7 @@ public void handleMessage(Message msg) {
185184
public void onRefresh(RefreshLayout refreshlayout) {
186185
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(),
187186
ON_PULL_TO_REFRESH_EVENT, null);
188-
handler.sendEmptyMessageDelayed(1,5000);
187+
handler.sendEmptyMessageDelayed(1, 5000);
189188
}
190189
});
191190
// Use default layout
@@ -343,9 +342,10 @@ public void onAutoScroll(boolean autoScroll) {
343342
return swipeRefreshLayout;
344343
}
345344

346-
int getId(){
345+
int getId() {
347346
return swipeRefreshLayout.getId();
348347
}
348+
349349
private PhotoViewPagerViewUtil.IPhotoLongClickListener longClickListener = new PhotoViewPagerViewUtil.IPhotoLongClickListener() {
350350
@Override
351351
public boolean onClick(final Dialog dialog, View v, final IMediaFile mediaFile) {
@@ -615,7 +615,8 @@ public void run() {
615615
mAdapter.addToEnd(list);
616616
} else if (intent.getAction().equals(RCT_SCROLL_TO_BOTTOM_ACTION)) {
617617
Log.i("RCTMessageListManager", "Scroll to bottom");
618-
msgList.smoothScrollToPosition(0);
618+
if (msgList != null)
619+
msgList.smoothScrollToPosition(0);
619620
// mAdapter.getLayoutManager().scrollToPosition(0);
620621
} else if (intent.getAction().equals(RCT_DELETE_MESSAGES_ACTION)) {
621622
String[] messages = intent.getStringArrayExtra("messages");

0 commit comments

Comments
 (0)