2016-03-31 39 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设置为暂停或播放状态。