2016-03-31 82 views
3

我正在爲android開發音樂播放器應用程序。當一首歌完成時,我發送一個廣播,並且在一個活動中,我想相應地改變播放/暫停圖標。從活動訪問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類中創建一個公共方法來處理此操作,並從Activity的onReceive()中調用該方法。 –

+1

很可能,您不想訪問viewHolder。而是要修改適配器中的某個數據條目,然後通知適配器該條目已更改。 – gMale

回答

2

您必須從您的活動中更改模型,然後要求適配器更新視圖。 Single responsibilityoop設計原則之一。例如,所有歌曲對象的值必須爲boolean,其值爲isPlaying。當用戶正在播放歌曲時,它必須設置爲true。那麼當您收到您的broadcast時,您會從列表中找到該歌曲,並將boolean設置爲false,然後撥打mAdapter.notifyDataSetChanged()。在您的getView方法中,您只需檢查該變量並將UI設置爲暫停或播放狀態。