触摸侦听器并更新recyclerView

时间:2016-01-04 06:24:07

标签: android android-recyclerview recycler-adapter

嗨我有recyclelerView行项目包括一个播放按钮(更改为停止和播放为切换)和播放搜索栏和TextView。

每一行都播放不同的音频。

当我点击相应行的播放按钮时,我可以停止另一行音频.. 解决问题.. 当我正在播放相应行的音频时,前一行的按钮必须存放播放符号(在某种意义上它必须更改状态)请帮助我在单击其他项目时更新其他行的recyclerView

  @Override
public void onBindViewHolder(final ViewHolder holder, final int i) {

    if (holder.viewType == ROW_TYPE){
       // holder.play_button.setImageResource(R.drawable.play_button);

        if(i == selected_item){

        }
        else {
           // holder.play_button.setImageResource();
        }
        JSONObject obj;
        String mp3_url = null, caption = null, thumbnail_url = null;

        try {
            obj = voicesArray.getJSONObject(i);
            mp3_url = obj.getString("mp3_url");
            caption = obj.getString("caption");
            thumbnail_url = obj.getString("thumbnail_url");

        } catch (JSONException e) {
            e.printStackTrace();
        }

        holder.list_text.setText(caption);
        imageLoader.DisplayImage(thumbnail_url, holder.list_image);


        final String finalMp3_url = mp3_url;
        holder.play_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                selected_item = i;
               int ii = holder.getOldPosition();
               // holder.play_button.setImageResource();

              //  updateItem(ii);

                if(player != null){

                    player.reset();
                    holder.play_button.setImageResource(R.drawable.play_button);
                    myAudioPlay(holder, finalMp3_url);
                }

                else {

                    myAudioPlay(holder,finalMp3_url);
                    /*if (player == null) {
                        player = new MediaPlayer();
                        playAudiFile(finalMp3_url);
                        holder.play_button.setImageResource(R.drawable.pause_button);

                    } else if (player.isPlaying()) {
                        holder.play_button.setImageResource(R.drawable.play_button);

                        player.stop();

                        Log.d("player", "" + player);
                        player.reset();
                    } else {
                        holder.play_button.setImageResource(R.drawable.pause_button);
                        playAudiFile(finalMp3_url);
                    }*/
                }






            }
        });
    }

}

1 个答案:

答案 0 :(得分:0)

显然,recyclelerView的目的是回收视图以最小化渲染视图所需的内存使用量,因此在视图中设置图像并不是一个合适的解决方案,他们为您的问题提供了许多解决方案我将选择(伪代码) )在下面给出

步骤1.在模型类

中创建一个布尔值
bool isPlay=true;

步骤2.当您通过模型为回收器适配器播放音频循环并设置isPlay accourdingly

的值时
for(object obj in listOfModels)
 if(obj.Id!=idOfthePlayingView)
        obj.isPlay=false;

然后通知您的适配器

yourRecyclerAdapterObject.notifyDatasetChanged()