2017-12-25 6 views
1

を一時停止している間、私は活動のアダプタとArrayListの更新アダプタデータアクティビティが

private ArrayList<String> data = new ArrayList<>(); 

を持っていると私は、データを取得するとき、私はbrodcastReciverはあまりにも私は、ArrayListのデータ

data.add("bla bla bla"); // brodcast data 

にそれを追加しており、アップデートアダプター

アクティビティーが一時停止し、ブロドキャストデータが欠落したときにアダプターが更新されない

ので、このためのソリューションは、私はちょうどいくつかの検索を行い、このanswerが見つかりましたが、彼は

私のアプリのアイデアは、コースのsqliteの問題とのチャットアプリは、私がBrodcastEventを逃したアイデアを共有did't何時に活動の一時停止とアクティビティが再開されるたびにsqliteからデータを取得します。それは悪い考えです。

答えて

0

BroadcastReceiverは、アクティビティの開始または再開なしのイベントを受信します。

<receiver android:name="YourReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.YourAction" /> 
    </intent-filter> 
</receiver> 

さらに、BroadcastReceiver通知メッセージアダプタ。

シングルトンオブジェクトをオブザーバレジスタマネージャとして定義できます。 activityが起動すると自分自身を登録し、新しいメッセージを受信するとBroadcastReceiverに通知します。

protected void onCreate(Bundle savedInstanceState) { 
    ... 
    SingletonRegister.getInstance().observe(this); 
} 

@Override 
public void update(String message) {    
    data.add(message);  
} 

activityが起動しない場合は

Activity

@Override 
public void onReceive(Context context, Intent intent) { 
    ... 
    SingletonRegister.getInstance().addMessage("bla bla bla"); 
} 

BroadcastReceiver

activityがあるため登録されていないの通知れませんでした。すべてのメッセージを確実に受信するには、 activityは、レジスタの後に最後のメッセージを積極的に要求する必要があります。

Activity

protected void onCreate(Bundle savedInstanceState) { 
    ... 
    SingletonRegister.getInstance().observe(this); 
    requestMessageFromServer(); 
}