我做的方式
- 类 GroupChatActivity
- 类 MessageDataSource
- 类句柄NewMessage
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 的同一个实例对话,您可以创建一个自定义接口来通知任何观察者。
例子:
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中,您可以设置(在我的情况下)OnInserListener,就像设置 OnClickListener 的正常方式一样。或者你可以让你 Activity 实现接口。
此示例可能无法满足您的确切需求,但要观察何时将新内容插入您的数据库并且您需要更新您的 listView,我认为这是要走的路,但如果有人找到更好的方法,请发表评论。:D
我希望这可以使您朝着正确的方向前进。
亲切的问候。