我这样做的方式
- 类 GroupChatActivity
- 类消息数据源
- 类 HandleNewMessage
群聊活动有点明显。
MessageDataSource 是从数据库插入和返回对象的类。
HandleNewMessage,这个我想不需要解释了。
- GroupChat -> MessageDataSource -> getMessages()
- HandleNewMessage -> MessageDataSource -> insertNewMessage();
您现在想要的是 GroupChat 和 HandleNewMessage 与 MessageDataSource 的同一实例进行对话。
所以你要做的就是在 MessageDataSource 中对 MessageDataSource 进行静态引用
例子:
public class MessageDataSource {
private static MessageDataSource mInstance;
public static MessageDataSource getInstance(Context context) {
if(mInstance == null){
mInstance = new MessageDataSource(context);
}
return mInstance;
}
private MessageDataSource(Context context) {
// NOTE: private constructor
}
}
因为你将构造函数设为私有,所以你不能这样做
MessageDataSource data = new MessageDataSource(context);
因为构造函数是私有的,所以你必须这样做
MessageDataSource data = MessageDataSource.getInstance(context);
现在你的课程团体活动 and 处理新消息可以与您的 MessageDataSource 的同一实例对话,您可以进行自定义界面通知任何正在观察的听众。
Example:
public class MessageDataSource {
private static MessageDataSource mInstance;
private SQLiteDatabase mDataBase;
private SQLiteHelper DBHelper;
private OnInsert mOnInsert;
public static MessageDataSource getInstance(Context context) {
if(mInstance == null){
mInstance = new MessageDataSource(context);
}
return mInstance;
}
private MessageDataSource(Context context) {
DBHelper = SQLiteHelper.getInstance(context);
}
public void createMessage(String JID, String message, String sender) {
// Do DB Stuff here
if(mOnInsert != null) {
mOnInsert.onInsert(message);
}
}
public void setOnInsertListener(final OnInsert onInsert) {
mOnInsert = onInsert;
}
public static interface OnInsert {
// Notify the observer that an insert has bin made
public String onInsert(String message);
}
}
您可以通过您认为需要的接口发送任意数量的对象。
现在在你的群聊活动您可以按照设置 OnClickListener 的常规方式设置(在我的情况下)OnInserListener。或者你可以让你的活动实现接口。
这个示例可能不符合您的确切需求,但是为了观察何时将新内容插入到您的数据库中并且您需要更新您的 listView,我认为这是正确的方法,但如果有人找到更好的方法,请发表评论。 :D
我希望这能让你朝着正确的方向前进。
亲切的问候。