Android会在聊天应用中保持滚动位置和文字

时间:2017-10-10 15:50:06

标签: android

我正在开发一个Android聊天应用程序,我有一个屏幕,其中包含要与之聊天的所有聊天成员的列表(RecyclerView)。当我点击一个成员时,我得到另一个屏幕,其中包含所选成员所有消息的列表(RecyclerView)。

当我切换到另一个成员时,如何保持列表的滚动位置与消息并保存组合文本(如果消息尚未发送)? 我想在返回特定列表时恢复这些设置。

1 个答案:

答案 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_textpositionchat_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获得更多解释。