改良《第一行代码》第二版第三章中第的聊天页面,使得发出去的消息可以用sharedpreferences进行保存在当前页面中
时间: 2023-06-27 10:07:50 浏览: 38
要实现这个功能,可以按照以下步骤来操作:
1. 在聊天页面中添加一个EditText控件和一个Button控件,用于输入消息和发送消息。
2. 在聊天页面中添加一个ListView控件,用于显示聊天记录。
3. 在聊天页面的onCreate方法中,初始化ListView控件,并从SharedPreferences中读取之前保存的聊天记录。
4. 在发送消息的Button控件的onClick方法中,将输入的消息保存到SharedPreferences中,并更新ListView控件的数据源,刷新ListView控件。
5. 在聊天页面的onResume方法中,从SharedPreferences中读取最新的聊天记录,并更新ListView控件的数据源,刷新ListView控件。
下面是代码示例:
1. 在布局文件中添加EditText、Button和ListView控件:
```xml
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入消息" />
<Button
android:id="@+id/send_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
2. 在聊天页面的onCreate方法中,初始化ListView控件,并从SharedPreferences中读取之前保存的聊天记录:
```java
public class ChatActivity extends AppCompatActivity {
private EditText mEditText;
private Button mSendButton;
private ListView mListView;
private List<String> mMessageList;
private ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
mEditText = findViewById(R.id.edit_text);
mSendButton = findViewById(R.id.send_button);
mListView = findViewById(R.id.list_view);
mMessageList = new ArrayList<>();
mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mMessageList);
mListView.setAdapter(mAdapter);
SharedPreferences preferences = getSharedPreferences("chat_history", MODE_PRIVATE);
int size = preferences.getInt("size", 0);
for (int i = 0; i < size; i++) {
String message = preferences.getString("message_" + i, "");
if (!message.isEmpty()) {
mMessageList.add(message);
}
}
mAdapter.notifyDataSetChanged();
}
// ...
}
```
3. 在发送消息的Button控件的onClick方法中,将输入的消息保存到SharedPreferences中,并更新ListView控件的数据源,刷新ListView控件:
```java
public class ChatActivity extends AppCompatActivity {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = mEditText.getText().toString();
if (!message.isEmpty()) {
SharedPreferences preferences = getSharedPreferences("chat_history", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
int size = preferences.getInt("size", 0);
editor.putString("message_" + size, message);
editor.putInt("size", size + 1);
editor.apply();
mMessageList.add(message);
mAdapter.notifyDataSetChanged();
mEditText.setText("");
}
}
});
}
// ...
}
```
4. 在聊天页面的onResume方法中,从SharedPreferences中读取最新的聊天记录,并更新ListView控件的数据源,刷新ListView控件:
```java
public class ChatActivity extends AppCompatActivity {
// ...
@Override
protected void onResume() {
super.onResume();
SharedPreferences preferences = getSharedPreferences("chat_history", MODE_PRIVATE);
int size = preferences.getInt("size", 0);
for (int i = mMessageList.size(); i < size; i++) {
String message = preferences.getString("message_" + i, "");
if (!message.isEmpty()) {
mMessageList.add(message);
}
}
mAdapter.notifyDataSetChanged();
}
// ...
}
```
这样,就可以在聊天页面中实现保存聊天记录的功能了。