我的做法
- 类 GroupChatActivity
- 类 MessageDataSource
- 类 HandleNewMessage
GroupChat 活动有点明显。
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);
现在您的类 GroupActivity 和 HandleNewMessage 可以与 MessageDataSource 的同一个实例进行通信,您可以创建一个自定义 Interface 来通知任何观察者.
例子:
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);
}
}
您可以通过您认为需要的接口发送任意数量的对象。
现在,在您的 GroupChatActivity 中,您可以像设置 OnClickListener 的正常方式一样设置(在我的情况下) OnInserListener。或者你可以让你 Activity 实现接口。
此示例可能不符合您的确切需求,但要观察何时将新内容插入您的数据库并且您需要更新您的 listView,我认为这是要走的路,但如果有人找到更好的方法请评论。 :D
我希望这能让你朝着正确的方向前进。
亲切的问候。