我有服务
public class GcmIntentService extends IntentService{...}
管理通知。 当用户离开应用程序时收到通知,点击通知后主要活动将恢复并更新
public class MainActivity extends Activity {
...
lv = (ListView) findViewById(R.id.lv);
adapter = new Adapter(this, item);
lv .setAdapter(adapter);
...
}
但如果用户已在其上,我该如何更新活动?
答案 0 :(得分:2)
您必须使用BroadcastReciever执行此任务:http://developer.android.com/reference/android/content/BroadcastReceiver.html
在活动中:
public class MainActivity extends Activity {
public static final String NOTIFY_ACTIVITY_ACTION = "notify_activity";
private BroadcastReciver broadcastReciver;
@Override
protected void onStart() {
super.onStart();
broadcastReciver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction.equals(NOTIFY_ACTIVITY_ACTION ))
{
//to do smth
}
}
}
IntentFilter filter = new IntentFilter( NOTIFY_ACTIVITY_ACTION );
registerReceiver(broadcastReciver, filter);
}
@Override
protected void onStop()
{
unregisterReceiver(broadcastReciver);
}
}
在服务中:
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(MainActivity.NOTIFY_ACTIVITY_ACTION );
broadcastIntent.putExtra("addtional_param", 1);
broadcastIntent.putExtra("addtional_param2", 2); //etc
sendBroadcast(broadcastIntent);
<强>更新强>
BTW最好使用LocalBroadcastManager在应用程序内发送广播。它使用与普通广播相同的方式,但首先创建LocalBroadcastManager:
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(MainActivity.this);
并在onStart中:
manager.registerReciever(broadcastReciver, filter);
并在onStop中:
manager.unregisterBroadcast(broadcastReciver);
并在服务中:
manager.sendBroadcast(broadcastIntent);
答案 1 :(得分:0)
如果您正在使用该列表并且您想重新加载活动只是为了刷新列表,我建议您在收到消息后立即在adatper上使用以下方法。这将刷新列表中的内容,列表将自动更新(无需重新启动活动)
adapter.notifyDataSetChanged()
此方法通知附加的观察者基础数据已更改,反映数据集的任何视图都应自行刷新。
重新加载活动不是一个好选择,但如果没有其他解决方案而不是重新创建活动,我建议刷新视图本身。
希望这有帮助。