2016-03-31 9 views
3

私はアンドロイド用の音楽プレーヤーアプリを開発しています。曲が完成すると、私は放送を送り、アクティビティではそれに応じて行の再生/一時停止アイコンを変更したい。アクティビティのRecyclerviewビューアにアクセス

アクティビティは次の曲のブロードキャストを受信しますが、行をアクティビティから更新する方法はわかりません。

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_now_playing); 

     mStaggerGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL); 

     mRecyclerView = (RecyclerView) findViewById(R.id.now_playing_songs_list); 
     mRecyclerView.setLayoutManager(mStaggerGridLayoutManager); 
     mAdapter = new ListAdapter(this, mSongList) 
     mRecyclerView.setAdapter(mAdapter); 
     mReciever = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       if(intent.getAction().equals(MusicService.SONG_FINISHED)) { 
        //WANT TO CHANGE ROW ICON HERE 
       } 
      } 
     }; 

アクティビティでmAdapter内で定義されたビューホルダにアクセスするにはどうすればよいですか?

+0

ListAdapterクラスでパブリックメソッドを作成し、このメソッドをアクティビティのonReceive()から呼び出します。 –

+1

おそらく、あなたはviewHolderにアクセスしたくありません。代わりに、アダプターのデータ項目の1つを変更して、項目が変更されたことをアダプターに通知したいとします。 – gMale

答えて

2

アクティビティからモデルを変更してから、アダプタにビューの更新を依頼する必要があります。 Single responsibilityoopデザイン原則の1つです。たとえば、すべての曲オブジェクトにはboolean値の名前isPlayingが必要です。ユーザーが曲を再生するときは、trueに設定する必要があります。 broadcastを受け取ったら、リストからその曲を見つけ、booleanfalseに設定してから、mAdapter.notifyDataSetChanged()に電話してください。 getViewメソッドでは、その変数をチェックし、UIにポーズまたは再生状態を設定するだけです。