2016-05-25 14 views
0

から両方の活動のテキストを更新し、I)MainActivity II)FavoriteActivityと非活動クラスRadioService。どちらのアクティビティも同じメソッド - notifyShowBar()の場合、[email protected]で定義されたテキストバーが表示されます。Androidの活動:定期的に、私は2つの活動を持って同じデータソース

活動がRadioServiceを呼び出したときに今、それは親アクティビティのバー、それが定期的にサーバから情報を取得し、TimerTaskをを作成し、示し

public class FavoriteActivity extends AppCompatActivity implements View.OnClickListener { 

@Override 
protected void onResume() { 
    super.onResume(); 
    notifyShowBar(); 
} 
public void notifyShowBar() { 
.... 
    textView.setText(revs.getMeta()); 
.... 
} 
..... 

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

@Override 
protected void onResume() { 
    super.onResume(); 
    notifyShowBar(); 
} 
public void notifyShowBar() { 
.... 
    textView.setText(revs.getMeta()); 
.... 
} 
..... 

FavoriteActivity.java 。バーは15秒ごとに最新の情報を表示します。

private class ProgressTask extends AsyncTask<String, Void, Boolean> { 

    @Override 
    protected void onPostExecute(final Boolean success) { 
      updateMeta(); 
      .... 
    } 

    public void updateMeta() { 
    timerAsync = new Timer(); 
    timerTaskAsync = new TimerTask() { 
     @Override 
     public void run() { 
       ((Activity)context).runOnUiThread(new Runnable() { 
       @Override public void run() { 
        // get and set meta data here and then call createShowBar 
        createShowBar(); 
       } 
      }); 
     } 
    }; 
    timerAsync.schedule(timerTaskAsync, 0, 15000); 
    } 

    private void createShowBar() { 
    if (RadioService.inwhich == 2) { 
     ((FavoriteActivity) context).notifyShowBar(); 
    } else { 
     ((MainActivity) context).notifyShowBar(); 
    } 
    } 
..... 
} 

問題は、私はRadioServiceを呼び出すMainActivityでボタンを実行した場合、それは定期的にそこにバーや更新を示しています。しかしFavoriteActivityを参照すると、バーが表示されますが、定期的には更新されません。どちらのアクティビティでも、どうすれば実現できますか?ありがとう。

答えて

1

BroadcastReceiverを使用してください。インテントフィルタに登録すると、sendBroadcastで送信されたインテントが受信されます。アプリが表示されている間だけ更新したい場合は、受信機onStartを登録し、onStopの登録を解除します。

public class FavoriteActivity extends AppCompatActivity { 
    private static final String ACTION_UPDATE = "Something unique"; 

    private static final IntentFilter FILTER = new IntentFilter(ACTION_UPDATE); 

    private final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // do your thing 
     } 
    }; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     registerReceiver(receiver, FILTER); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     unregisterReceiver(receiver); 
    } 
} 

また

Intent intent = new Intent(ACTION_UPDATE); 
// add data to intent 
sendBroadcast(intent); 

でブロードキャストを送信し、これを行うために、より安全な方法でLocalBroadcastManagerを見てください。

+0

提案していただきありがとうございます。ユーザーはFavoriteActivityのinit RadioServiceもできます!その後、RadioServiceはtimertaskを作成し、FavoriteActivityのバーを定期的に更新し始めます。したがって、MainActivityの定期的な更新はありません。それは逆の状況です。何をすべきか? –

+1

放送は火のようなものです。あなたが1つを送信し、誰かが聞いている場合、それを受け取るかもしれません。どちらのアクティビティーもリスニング、どちらか一方、または両方のリスニングを行うことができます。 – DariusL

+0

それは完璧に働いてくれてありがとう。あなたは救済者です:D –

5

これは簡単な継承ルールで行うことができます。 AppCompatActivityを拡張する抽象メソッドnotifyShowBarを使用してabstract BaseActivityを作成します。 の子クラスとしてMainActivity & FavoriteActivityを使用してください。 抽象化のルールに起因するので、notifyShowBar方法はMainActivity & FavoriteActivityに実装しなければならないであろう、あなたはBaseActivitynotifyShowBarを呼び出すたびので、それは私が使用した私のアプリの同様の問題のために子クラスに

+0

基本活動コードで説明してください。私の初心者の英語には申し訳ありません。ありがとう。 –

+0

http://paste.ubuntu.com/16690460/このようなもの – Rahul

+0

貼り付けてくれてありがとう。私はそれを試しました、それはいつものようにすべての活動ではなく、それが作成された場所を更新テキストバーを表示しています。元の問題に戻ります。例えば、私がお気に入りの活動からこのラジオサービスを作成した場合、主な活動ページではなく、お気に入りの活動についてのみ定期的に更新されます。ここに私の更新されたバージョンのコードです:http://pastebin.com/JmNthAkp –

0

を同じを呼び出しますアクティビティに依存しないサービス+ Square's Otto bus。サービスは、さまざまなイベントをバスにポストし、アクティビティはこのバスインスタンスとイベントタイプをサブスクライブし、対応するアクションを実行します。

関連する問題