我有一个list
的片段。我想在每次GCM通知时插入一个新行。
第1部分
我很困惑我应该在哪里附加数组适配器:
listView.setAdapter(user_adapter); //this code
如果我选择在GCM服务中实现它,我怎样才能获得片段中夸大的布局参考?
我的代码
ArrayList<Add_Friend> array_of_friends = new ArrayList<Add_Friend>();
User_Adapter user_adapter = new User_Adapter(getContext(),1,array_of_friends);
ListView listView = (ListView)v.findViewById(R.id.list_1);
listView.setAdapter(user_adapter);
为服务撰写的代码
public class MyGcmListenerService extends GcmListenerService {
private static final String TAG = "MyGcmListenerService";
Update_Friend_Req_List update_friend_req_list;
/**
* Called when message is received.
*
* @param from SenderID of the sender.
* @param data Data bundle containing message data as key/value pairs.
* For Set of keys use data.keySet().
*/
// [START receive_message]
@Override
public void onMessageReceived(String from, Bundle data) {
String message = data.getString("message");
Log.d(TAG, "From: " + from);
Log.d(TAG, "Message: " + message);
Log.d(TAG, "DATA: " + data);
//Log.d(TAG, "Message: " + message);
String senders_email = data.getString("senders_email");
if(message.equals("New Friend Req")){
//Use Array Adapter to make friends list
//Use a broadcast receiver to update list
//register_broadcast_update_friend_req();
//Directly update UI
}
if (from.startsWith("/topics/")) {
// message received from some topic.
} else {
// normal downstream message.
}
}
答案 0 :(得分:0)
您可能不希望直接访问布局,但有几种方法可以解决这个问题。我认为最简单的方法是在Fragment中设置一个BroadcastReceiver
,您可以注册并取消注册片段的生命周期。在您的服务中,您然后广播可能包含新数据的自定义Intent,最好使用LocalBroadcastManager
来保持所有内部广播。这样,您的片段就可以使用接收器监听消息,并且只有在片段处于活动状态时才会收听消息。
如果您确实想要在收到消息时未启动某个视图,则需要在服务中对startActivity
执行某些操作。