2016-07-21 7 views
0

私はアンドロイドチャットアプリを持っています。また、taskfragmentという1つの断片には、通知カウンタ付きチャットのリストがあります。サービスからのアクティビティの変更

通知を処理するchatServiceというクラスがあります。通知はチャットサービスを介して来るたびにdbを更新し、特定のタスクの通知番号を増やします。

taskfragmentが開くと、refreshTasks()という関数が呼び出され、データベースからguiが更新されます。

私の問題は、ユーザーがtaskfragmentにいて、通知を受け取った場合、チャットサービスからrefreshtasksを呼び出す必要があります。どうすればいいですか?

ありがとうございました。

答えて

1

LocalBroadcastManagerをご利用いただけます。
アイデアは、新しいメッセージを受信したときサービスからブロードキャストを送信し、

class YourService extends GcmListenerService{ 
@Override 
public void onMessageReceived(String from, Bundle bundle) { 
    ... 
    Intent pushNotification = new Intent("pushNotification"); 
    //put any extra data using Intent.putExtra() method   
    LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification); 
    ... 
    } 
} 

今すぐあなたのフラグメント上でそれを受け取るあなたのフラグメント上でそれを受け取ることです。

class TaskFragment extends Fragment{ 
private BroadcastReceiver mBroadcastReceiver; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ... 
     mBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals("pushNotification")) { 
       // new push message is received 
       //update UI 
       handlePushNotification(intent); 
      } 
     } 
    }; 
    ... 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    // registering the receiver for new notification 
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mBroadcastReceiver, 
      new IntentFilter("pushNotification")); 
} 

@Override 
protected void onDestroy() { 
    //unregister receiver here 
    LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mBroadcastReceiver); 
    super.onDestroy(); 
    } 
} 

あなたはこのgistを参照するか、見つけることができますWeb上のチュートリアル。

+0

大したものではありませんが、(これを)getActivity()に変更する必要があります。 –

+0

ありがとうございます。回答が更新されました。 –

関連する問題