我正在开发一个Android聊天应用程序,我有一个屏幕,其中包含要与之聊天的所有聊天成员的列表(RecyclerView)。当我点击一个成员时,我得到另一个屏幕,其中包含所选成员所有消息的列表(RecyclerView)。
当我切换到另一个成员时,如何保持列表的滚动位置与消息并保存组合文本(如果消息尚未发送)? 我想在返回特定列表时恢复这些设置。
答案 0 :(得分:0)
这是你必须做的。首先,我假设您有一个 One 活动,可以监控应用中的所有聊天并显示它们。正如您所说,每个聊天的 ID 与其他聊天不同。如果假设不符合你的应用程序的性质,请评论,所以我可以编辑答案!
我给出的解决方案很快,并且会给你一个位置(回收者视图)和聊天文本(在编辑文本中),即使电话被关闭你仍然可以恢复这些值。 / p>
有三种方法可以在您的活动类中定义它们: 第一个是:
private boolean setChatScrollPositionAndText(String chat_text,int position,String chat_id){
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(chat_id+"position",position);
editor.putString(chat_id+"text",chat_text);
return editor.commit();
}
第二个和第三个是:
private String getLastText(String chat_id){
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
return sharedPref.getString(chat_id+"text","");
}
private int getLastPosition(String chat_id){
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
return sharedPref.getInt(chat_id+"position",0);
}
第一种方法会接受三件事chat_text
,position
,chat_id
所有这些值都可以从您的布局视图中获取。当活动暂停时,应在活动onPause
方法中调用此方法,以便将其保存为:
@Override
protected void onPause() {
super.onPause();
setChatScrollPositionAndText("your chat text from edit text",0,"your unique chat id");
}
您可以从聊天文本传递的值来自editText
使用类型和来自position
的适配器OR布局管理器的recyclerView
,并且还传递了ID聊天作为第三个参数将它们保存在那里它们都被保存了。
然后要检索所有这些值,您必须在活动的onResume
方法中调用它们,即使您的活动刚刚恢复,它也很有用
@Override
protected void onResume() {
super.onResume();
String myTextWas=getLastText("your unique chat id");
int my_recycler_position=getLastPosition("my unique chat id");
}
要检索,您将使用第二种和第三种方法,获取此值并使用它们来设置编辑文本中的文本和/或将recyclerView滚动到所获得的位置。
注意强>
如果用户第一次访问聊天,则默认位置为0
,默认字符串为""
空字符串。
整个解决方案使用SharedPreferences,这是在android中保存键值对的方法
您可以自己训练并从the official android training获得更多解释。