|
我有一个RecyclerView带有firebase实时数据库和本地数据库SQLite数据库聊天应用程序。我将消息保存到当地数据库(SQLite)中间,然后调用adapter.notifyDataSetChanged()。3 F+ g6 D1 z+ L. d) z; L
如果消息在数据库中(唯一的消息)ID),则SQLite将在数据库insertOrThrow返回0 的方法。我正在检查这样的可用性。) L3 T) f5 {# T* ?7 u6 B4 |9 q. ?
if (id == 0) { Log.d(TAG,"Database Already Has Value Of This Random Id "); adapter.notifyDataSetChanged();} else Chat_Wrapper chat_wrapper = new Chat_Wrapper(Chat_Msg,null,null,null,null,null,null,Chat_TimeStamp,UserPhone_Intent,UserImage_Intent,Chat_FROM,null,null,id); message.add(chat_wrapper); adapter.notifyDataSetChanged();}但是,即使else正在调用这个句子,我的RecyclerView屏幕不会更新,但在后台,如果我输入或收到任何信息,它将保存在本地数据库中,但不会显示在屏幕上。
8 z* M9 [6 G2 o8 d, B1 VRecyclerView在以下情况下可以聊天% l, P! J+ `: Y/ C
[ol]当我从最近的应用程序中删除应用程序时2 q8 x# e, n1 \; |& I
停止从本地数据库获取数据2 z$ k; q7 m& ?
聊天屏幕首次启动[/ol]当我直接从通知中进入聊天屏幕时,我遇到了这个问题。
3 U) E. G- Q1 J. r- j* y这就是我正常加载聊天片段的方式。0 r- Y$ t' ^; }+ p( e# w6 m
getFragmentManager().beginTransaction().add(R.id.Navigation_Drawer,chatFragment).commit();
' l ?' z) ~% s) h2 x加载Fragment从Notification使用Asynctask" v/ X" ?% H; C" a! X, i9 ]
((Navigation_Drawer)context).getFragmentManager().beginTransaction().replace(R.id.Navigation_Drawer,chatFragment).commit();这从通知开始ChatFragment的方式。
# w3 j) b" j* ?' spublic class FireBase_Messaging_Service extends FirebaseMessagingService public static final String TAG="###FireBase MSG###"; public static final int NOTIFICATION=5; String UserName; String ID; String Msg; Map data; @Override public void onMessageReceived(RemoteMessage remoteMessage) super.onMessageReceived(remoteMessage); Log.d(TAG,"From " remoteMessage.getFrom();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;if (remoteMessage.getData().size()>()()()()())( )data = remoteMessage.getData();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Log.d(TAG,"Message Data " remoteMessage.getData()); data = remoteMessage.getData();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UserName = data.get("name"); ID = data.get("ID"); Msg = data.get("Message"); showNotification(Msg,ID,UserName); } if (remoteMessage.getNotification()!=null) Log.d(TAG,"Message Notification Body " remoteMessage.getNotification().getBody(); Toast.makeText(this,"Notification " remoteMessage.getNotification().getBody(),Toast.LENGTH_LONG).show();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;private void showNotification(String Message,String ID,String UserName) Log.d(TAG,"Show Notification " Message " " ID); Intent intent=new Intent(this,Navigation_Drawer.class); intent.putExtra("Type","Text"); intent.putExtra("Type",MsgType); intent.putExtra("ID",ID); intent.putExtra("uname",UserName); intent.putExtra("Message",Msg); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent=PendingIntent.getActivity(this,NOTIFICATION,intent,PendingIntent.FLAG_UPDATE_CURRENT); int color = getResources().getColor(R.color.black); String ChannelID = "Message"; notificationChannel(ChannelID,"Chat"); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(),ChannelID) .setSmallIcon(R.drawable.default_x) .setColor(color) .setContentTitle(UserName) .setContentText(Message) .setChannelId(ChannelID) .setTicker("My App") .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.FLAG_SHOW_LIGHTS) .setLights(0xff00ff00,/ / To change Light Colors .setStyle(new NotificationCompat.BigTextStyle().bigText(Message))//For Expandable View .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentIntent(pendingIntent) .setAutoCancel(true); NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this); managerCompat.notify(NOTIFICATION,builder.build();@Override public void onDeletedMessages()(){ super.onDeletedMessages(); private void notificationChannel (String ChannelID,String channelName) if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) NotificationChannel channel = new NotificationChannel(ChannelID,channelName,NotificationManager.IMPORTANCE_DEFAULT); channel.setLightColor(Color.GREEN); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(channel); 我还通过记录日志注意到,在将数据添加到列表中后,message.add(chat_wrapper)它首先显示了大小的增加,但当while循环结束时,它显示了的最后一个大小ArrayList。
, J6 @; n( x1 B4 C. S) N这是ChatFragment课程。
" y o* J% h- B8 @2 j public class Chat_Screen_Fragment extends Fragment implements View.OnClickListener,ChildEventListener{ public static final String TAG = "###CHAT SCREEN###"; List message = new ArrayList(); Chat_Adapter adapter; RecyclerView recyclerView;& o+ q& x" v' X4 ?; A& _7 w
LinearLayoutManager layoutManager;
9 a! ?; H0 W8 O* d) l( t4 ~ @Nullable
: {$ G1 T& X8 v; f' h @Override+ {, ?- Q$ y# ?0 A0 k# g" s+ s
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {9 Q- L5 |' J+ Q9 ^4 T3 n
View v=inflater.inflate(R.layout.chat_screen_main_fragment,container,false);
/ U" t/ I% ~) O# m( a$ ] setRetainInstance(true);' T4 y8 G1 B+ r) {/ v
GET INTENT VALUES FROM USER PROFILE CLASS- j8 p8 A7 |3 P" L" c( `% W# T
UserName_Intent = getArguments().getString("Get_Name");1 C& y" J0 F& |% u3 h8 J5 S2 ^ q
UserImage_Intent = getArguments().getString("Get_Image");) w( N" G: R5 v
UserPhone_Intent = getArguments().getString("Get_Phone");8 W# j4 [ I' d" Z* V
UserID_Intent = getArguments().getString("Get_ID");0 ?! X: Z6 t6 u3 }
FirebaseToken_Intent = getArguments().getString("Get_Token"); //Firebase Token of other person) j, A- `1 @7 M3 u: J) d1 v* l
Room_Name_Intent = getArguments().getString("Get_Other"); // Room Name of chat
, O& O& }6 r% e8 C UserLastSeen_Intent=getArguments().getString("LastSeen");
! Q l7 z$ H/ B7 N5 x" d, }6 b ` Sender_FCMToken = Session.getFirebaseID();
$ F n4 }9 D% s+ ? RECYCLER VIEW
* J0 E# C) `, h# S recyclerView = v.findViewById(R.id.Chat_Screen_Message_List);+ \4 b" {# c u/ X
layoutManager = new LinearLayoutManager(getActivity());' D* P; G" `' z- f5 Z2 t) c
layoutManager.setStackFromEnd(true);
0 P2 K- d8 D, s* S% G3 p$ i recyclerView.setHasFixedSize(true);: i% S8 H2 N; _0 h+ t9 ?0 e
recyclerView.setLayoutManager(layoutManager);3 M8 O7 x& a, U1 R& F6 ?7 d
databaseReference = FirebaseDatabase.getInstance().getReference().child(Room_Name_Intent);) a( M! H, o' L0 {, [9 @
databaseReference.addChildEventListener(this);
$ c: g2 p/ U& r! U# B adapter = new Chat_Adapter(getActivity(), message);: }' O8 e, @ h3 Y- F
recyclerView.setAdapter(adapter);
& k/ q9 R" o: l) }( G5 z FETCH OLD MESSAGE FROM DATABASE
4 A0 M4 `* s& S1 [. [ x chatDatabase();
7 U9 e/ Z8 ?6 I4 _; r7 L, @6 J return v;
$ }7 ^0 p/ b! k& a" B1 x }0 _3 e7 \4 T: p. f8 m
// FIREBASE REAL TIME DATABASE WHICH FETCH ALL MESSAGES (SYNC) FROM ONLINE DATABASE, U' N+ z# D, M. x
@Override
) N8 s9 p: w6 d2 F) o: j5 ? public void onChildAdded(DataSnapshot dataSnapshot, String s) {
9 L9 }* Q. w; O4 Y2 N7 a. ? B9 S% Z append_chat_conversation(dataSnapshot);
2 a/ v+ P' C% x }) S' v9 h& `' U
@Override
/ U2 t8 C: r. q" e3 _ h& B public void onChildChanged(DataSnapshot dataSnapshot, String s) {( J( q6 W# {2 F; }: I
append_chat_conversation(dataSnapshot);' j0 n0 d7 P7 P _; F# \1 V
} r/ D0 L) x& |! C
@Override+ M& I8 R" J1 I- j
public void onChildRemoved(DataSnapshot dataSnapshot) {
' h# _; e) q6 q- ?. X }! S0 J# j5 ^, i* D0 t
@Override
& }; Z: n# p: o) c# t1 m public void onChildMoved(DataSnapshot dataSnapshot, String s) {$ b& v6 r5 f0 N& ?
}
! G9 k6 T2 G5 f2 \ @Override- @8 W* ~& e! y) Y9 P
public void onCancelled(DatabaseError databaseError) {% X+ ^6 }7 M: a# C! [
}! u) k, ?8 c+ k+ \' F7 O
private synchronized void append_chat_conversation(DataSnapshot dataSnapshot) {8 c Y, w8 X7 b3 A
iterator = dataSnapshot.getChildren().iterator();( E1 r' t* F: p# T/ O4 k4 u
while (iterator.hasNext()) {- ]! u5 ~3 G$ W6 i/ r% E: q
GETTING DATA FROM FIREBASE DATABASE. E1 x$ g3 i* g- |/ I3 E
Chat_Msg = (String) ((DataSnapshot) iterator.next()).getValue();1 e/ P2 f- I9 |9 Q! M. [ p
Chat_FROM = (String) ((DataSnapshot) iterator.next()).getValue();
0 l1 U3 \9 H$ V# m Chat_FROM_ID = (String) ((DataSnapshot) iterator.next()).getValue();
! I( _! q$ Q, K/ e9 s/ R Chat_TO = (String) ((DataSnapshot) iterator.next()).getValue();
: a: G& x) d. B) Z8 T Chat_TimeStamp = (String) ((DataSnapshot) iterator.next()).getValue();" y5 `2 @. V2 `& j) X4 {
Chat_Type= (String) ((DataSnapshot) iterator.next()).getValue();; `1 W1 P; f) z4 ]9 r# @4 Q
Random_ID=(String) ((DataSnapshot) iterator.next()).getValue();
/ I9 M" ], i* a$ b9 Y! g* P Chat_FCM_FROM= (String) ((DataSnapshot) iterator.next()).getValue();4 |9 e2 o1 v- B
Chat_FCM_TO= (String) ((DataSnapshot) iterator.next()).getValue();) k- c# J, @* v, y7 s5 [
Log.d(TAG, "Chat Items " Chat_Msg " " Random_ID);
' {9 _4 d5 I4 H, F! m Chat_Database tempChatDatabase = new Chat_Database(getActivity());
9 m8 O7 ~5 F& l boolean hasValue = tempChatDatabase.CheckValueExist(Random_ID);
( S/ q$ T0 X2 A! q3 y w2 v' E Log.d(TAG,"DATABASE ALREADY HAS VALUE OF TIMESTAMP= " hasValue);
. r$ G7 P- G+ l4 G1 Q* m' [ if (!hasValue) {
* ~# C$ |+ U' l& K" I: K9 e Log.d(TAG,"DATABASE DON'T HAVE SAME ENTRY FOR TIME STAMP. ENTERED INTO HAS VALUE");
0 ^9 R, k" A9 n1 x Log.d(TAG,"Chat Message " Chat_Msg);
; f* N; v9 o4 k3 H if (Chat_Type.equals("Typed_Message")) {. r3 L; x6 ]: z4 e* `
Log.d(TAG, "VIEW TYPE IS Message " Chat_Msg);) u/ N6 ?% O- n' V
long id = chat_database.Insert_Chat(Session.getUserID(),Room_Name_Intent, UserID_Intent, "Text", Chat_Msg, Chat_FROM, Chat_TO, Chat_TimeStamp, Chat_FCM_FROM, Chat_FCM_TO, Session.getPhoneNO(), UserPhone_Intent,Random_ID,UserImage_Intent,UserLastSeen_Intent,Chat_FROM_ID);
# z* x, ~0 q3 g5 w( Q, I2 M Adding Chat Data Into Database
! `' Z1 N1 a3 J! F* N Log.d(TAG,"Database Entry ID " id);
; p6 P5 |2 G' j# A if (id == 0) {
; }8 U8 }+ O# O$ D Log.d(TAG,"Database Already Has Value Of This Random Id ");. u* I+ b8 P( q* h
adapter.notifyDataSetChanged();) k$ b5 z# L& J* M5 @# f: s
continue;
9 s; h3 t( o$ [4 d } else {
8 O* o: m6 m7 h4 \1 N' o! D Log.d(TAG,"Database Don't Has Value Of This Random Id ");9 V& m" q( ^: u# O
Log.d(TAG,"Message Size " message.size());
2 T8 m& E, a6 |% f) D" k; i7 u Chat_Wrapper chat_wrapper = new Chat_Wrapper(Chat_Msg, null, null, null, null, null, null, Chat_TimeStamp, UserPhone_Intent, UserImage_Intent, Chat_FROM, null,null,id);, f* r3 m) }! ~. P8 A
message.add(chat_wrapper);; n8 @) @) L* H5 m. h% X
Log.d(TAG,"Message Size " message.size());+ _% D& W7 B1 ]9 r$ _, i4 l9 d+ s {7 P
adapter.notifyDataSetChanged();
) ~1 p \6 b2 s& Q, i8 ]! Q9 U; b Log.d(TAG,"Adapter Notified Data Set " adapter.getItemCount());9 o" p6 o \3 n# r7 b P% H6 H
recyclerView.post(new Runnable() {
/ G2 Y+ i6 k' D$ K @Override public void run()()(){ Log.d(TAG,"Moving to Bottom"); recyclerView.smoothScrollToPosition(adapter.getItemCount()); ; ; Log.d(TAG,"MESSAGE ARRAY SIZE " message.size();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;chat_database.isDatabaseClose();} private void chatDatabase()()(){ Database Init and Filling Adapter Log.d(TAG,"Chat Database Function"); chat_database=new Chat_Database(getActivity();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;chatCursor=chat_database.getUserChat(UserID_Intent); boolean checkDB_Exist=functions.DatabaseExist(getActivity(),"CHAT_DATABASE.DB"); boolean chatItemsCounts=chatCursor.getCount()>0; chatCursor.moveToFirst();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Log.d(TAG,"Value At Chat Database " checkDB_Exist " " chatItemsCounts); if (checkDB_Exist && chatCursor.getCount()>0 && chatCursor.getString(chatCursor.getColumnIndex("RECEIVER_USER_ID")).equals(UserID_Intent)) Log.d(TAG,"Database Exist Chat Database"); message.clear();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;chatCursor.moveToFirst();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;do database_rowID=chatCursor.getInt(chatCursor.getColumnIndex("ID")); database_userID=chatCursor.getString(chatCursor.getColumnIndex("USER_ID")); database_RoomName =chatCursor.getString(chatCursor.getColumnIndex("ROOM_NAME")); database_ReceiverID=chatCursor.getString(chatCursor.getColumnIndex("RECEIVER_USER_ID")); database_MessageType=chatCursor.getString(chatCursor.getColumnIndex("MESSAGE_TYPE")); database_Message=chatCursor.getString(chatCursor.getColumnIndex("USER_MESSAGE")); database_MsgFrom=chatCursor.getString(chatCursor.getColumnIndex("SENDER_NAME")); database_MsgTo=chatCursor.getString(chatCursor.getColumnIndex("RECEIVER_NAME")); database_TimeStamp=chatCursor.getString(chatCursor.getColumnIndex("TIME_STAMP")); database_FCMfrom=chatCursor.getString(chatCursor.getColumnIndex("SENDER_TOKEN")); database_FCMto=chatCursor.getString(chatCursor.getColumnIndex("RECEIVER_TOKEN")); database_LocalPath=chatCursor.getString(chatCursor.getColumnIndex("DOWNLOADED_AT")); database_PhoneFrom=chatCursor.getString(chatCursor.getColumnIndex("MY_PHONE")); database_PhoneTo=chatCursor.getString(chatCursor.getColumnIndex("OTHER_PHONE")); Log.d(TAG,"Value Of Database Message String = " database_Message); Log.d(TAG,"Row ID of Database " database_rowID); Check Message Type Log.d(TAG,"Message Type Is Text"); Chat_Wrapper text = new Chat_Wrapper(database_Message,null,null,null,null,null,null,database_TimeStamp,database_PhoneTo,UserImage_Intent,database_MsgFrom,null,null,database_rowID); message.add(text); while(chatCursor.moveToNext();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Room_Name_Intent = database_RoomName; layoutManager = new LinearLayoutManager(getActivity();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;recyclerView.setLayoutManager(layoutManager); adapter.notifyDataSetChanged();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;chatCursor.close();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;boolean value = chat_database.isDatabaseClose();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;recyclerView.post(new Runnable()(){ @Override public void run()(){ Log.d(TAG,"Moving to Bottom"); recyclerView.smoothScrollToPosition(message.size()-1); ); Log.d(TAG,"Value Of Database Close or Not " value);
8 T. u' T# X* p. x) T# f 解决方案: |
|