2017-04-07 31 views
5

Xin chào các bạn hy vọng tất cả các bạn đều ổn. Tôi đang phát triển một ứng dụng Android sẽ phát các âm thanh khác nhau của động vật.cách làm mới chế độ xem của chế độ xem hàng trước đó của chế độ xem tái chế

Tôi đang sử dụng Chế độ xem Recycle như bạn có thể thấy trong ảnh chụp màn hình bên dưới. Bây giờ tôi đang đối mặt với một vấn đề, tôi có một nút phát bên trong hàng của tôi đang phát âm thanh của động vật bất cứ khi nào tôi phát âm thanh từ mục 0 hoặc bất kỳ vị trí nào, nó hiển thị cho tôi tùy chọn tạm dừng trong chế độ xem. Nhưng bất cứ khi nào tôi nhấp vào mục tiếp theo 1 hoặc bất kỳ mục nào khác, nó không thay đổi hình ảnh của mục trước đó 0.

Tôi đang làm mới bằng danh sách bộ điều hợp bằng cách sử dụng mã sau.! nhưng tôi nghĩ rằng nó không phải là một thực hành tốt.!

   t1.recyclerView.setAdapter(null); 
       t1.customAdapter=new CustomAdapter(t1.animalList,ctx); 
       t1.recyclerView.setAdapter(t1.customAdapter); 

Tôi đã thử sử dụng mọi thứ như notifyItemChanged(oldPosition) nhưng vẫn không có kết quả mong muốn.!

Vui lòng đề xuất cho tôi một cách thích hợp để giải quyết vấn đề này? Tôi mới dùng Android và tôi có một suy nghĩ để có được cái nhìn của mục cuối cùng và lưu nó trước sau đó tôi nhận được rằng xem và thiết lập mặc định hình ảnh chơi trên nút danh sách trước đó của tôi nhưng tôi không biết làm thế nào để làm điều này?

đây là mã của tôi về Bộ điều hợp tùy chỉnh.!

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 
    private List<Animal> AnimalList; 
    public Context ctx; 
    public static int postionchange=-1; 

    public static Tab1Birds t1; 


    final int[] countLike = {0}; 
    //public static MediaPlayer mediaPlayer2 = new MediaPlayer(); 
    int pos=0; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
      public ImageView display; 
      public TextView nameTextView; 
      public ImageButton play,options,menubtn; 
      public MyViewHolder(View view) { 
       super(view); 
       nameTextView = (TextView) view.findViewById(R.id.nameTextView); 
       play=(ImageButton)view.findViewById(R.id.playbtn); 
       options=(ImageButton)view.findViewById(R.id.menubtn); 
       display=(ImageView)view.findViewById(R.id.imageview); 
       menubtn = (ImageButton) view.findViewById(R.id.menubtn); 
        //MediaPlayerClass.mediaPlayer= new MediaPlayer(); 
      } 
    } 
    public CustomAdapter(List<Animal> moviesList,Context ct) { 
     this.AnimalList = moviesList; 
     this.ctx=ct; 
     } 
    @Override 
     public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View itemView = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.row_list, parent, false); 
     return new MyViewHolder(itemView); 
     } 
    @Override 
     public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     final Animal animal = AnimalList.get(position); 

     final int[] previous = {position}; 
      holder.nameTextView.setText(animal.getName()); 
      holder.display.setImageResource(animal.getImageResource()); 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////// 
     holder.options.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       try { 
        if (MediaPlayerClass.mediaPlayer.isPlaying()) { 
         holder.play.setBackgroundResource(R.drawable.play_btn); 
         MediaPlayerClass.mediaPlayer.stop(); 
        } 
       } catch (Exception ex) { 
       } 
       Dialog dialog; 
       final String[] items = {"SET AS RING TUNE", "SET AS MESSAGE TUNE", "SET AS ALARM TUNE"}; 
       final ArrayList itemsSelected = new ArrayList(); 
       final AlertDialog.Builder builder = new AlertDialog.Builder(ctx); 
       builder.setTitle("OPTIONS"); 
       builder.setMultiChoiceItems(items, null, 
         new DialogInterface.OnMultiChoiceClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int selectedItemId, 
               boolean isSelected) { 
           if (isSelected) { 
            itemsSelected.add(selectedItemId); 
           } else if (itemsSelected.contains(selectedItemId)) { 
            itemsSelected.remove(Integer.valueOf(selectedItemId)); 
           } 
          } 
         }) 
         .setPositiveButton("Done!", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 
           Toast toast = Toast.makeText(ctx, "successfully selected", Toast.LENGTH_SHORT); 
            toast.show(); 
           SparseBooleanArray CheCked = ((AlertDialog) dialog).getListView().getCheckedItemPositions(); 
           String str = ""; 
           if (CheCked.get(0)) { 

            savering(animal.getSoundResource()); 
           } 
           if (CheCked.get(1)) { 
            savemsg(animal.getSoundResource()); 
           } 
           if (CheCked.get(2)) { 
            savealarm(animal.getSoundResource()); 
           } 
           // if (CheCked.get(3)) { 
            // DatabaseHelper.save_bookmarks(itemsList.get(position).getitemName(), R.drawable.play_btn, itemsList.get(position).getItemTuneSt()); 
            // Toast.makeText(ctx, "Item added to favourites", Toast.LENGTH_SHORT).show(); 

           // } 
          } 
         }) 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int id) { 
        } 
       }); 
       dialog = builder.create(); 
       dialog.show(); 
       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
      } 
     }); 
     pos=position; 

     // for animation 
     // /////////////////////////// 
     //animate(holder);//Function for animation 
     ////////////////////////////// 

     holder.play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if(postionchange==-1) 
       { 
        postionchange=position; 
       } 
       if(postionchange!=position) 
       { 
        holder.play.setBackgroundResource(R.drawable.play_btn); 
       } 
       holder.play.setBackgroundResource(R.drawable.pause_btn);// present state 
       MediaPlayerClass.play(animal.getSoundResource(),ctx); 
       if(countLike[0] ==0) 
        { 
         countLike[0] =1; 
        }else if(countLike[0] ==1) 
        { 
         //if is playing then Pause 
         if(MediaPlayerClass.mediaPlayer.isPlaying()) 
          MediaPlayerClass.mediaPlayer.stop(); 

         t1.recyclerView.setAdapter(null); 
         t1.customAdapter=new CustomAdapter(t1.animalList,ctx); 
         t1.recyclerView.setAdapter(t1.customAdapter); 


         holder.play.setBackgroundResource(R.drawable.play_btn); //sound stop show play button 
         countLike[0] =2; 
        } 
        if(countLike[0] >1) 
        { 
         countLike[0] =0; 
         holder.play.setBackgroundResource(R.drawable.play_btn); // click to play music, click again to stop music 

        } 
        //setOnCompletionListener 
       MediaPlayerClass.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mediaPlayer) { 
         holder.play.setBackgroundResource(R.drawable.play_btn); 
        } 
       }); 
       // MediaPlayerClass.mediaPlayer.start(); 

       } 
     }); 
    } 
     @Override 
     public int getItemCount() { 
      return AnimalList.size(); 
     } 
    //animation 
    public void animate(RecyclerView.ViewHolder viewHolder) { 
     final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(ctx, R.anim.bounce_interpolator); 
     viewHolder.itemView.setAnimation(animAnticipateOvershoot); 
    } 

    ////////////////////////////////////////////////////////////////////////////////////////// 

} 

enter image description here

Dưới đây là một ví dụ về Máy nghe nhạc Trong Samsung Điện thoại di động.! Khi nào tôi chơi nhạc, nó sẽ hiển thị hình động và khi tôi phát bài hát tiếp theo, nó sẽ phát bài hát đó và dừng phát nhạc trước đó và hoạt ảnh của nó. Tôi biết cách dừng trình phát phương tiện nhưng cách thay đổi dừng lại là hoạt ảnh hoặc thư viện nhạc, v.v.?

Stops Previous Animation in row and play music with animation.!

Samsung media Player

+0

Bạn có thể cho chúng tôi một số mã không? Tôi đoán chúng tôi không thể giúp đỡ nếu không nhìn vào những gì bạn đang làm. – Jay

+0

@Đã thêm mã.! có một cái nhìn vào nó.! –

+0

Tôi đang tìm ai đó để trả lời nó.! –

Trả lời

0

Bellow mẫu làm việc cho một danh sách dữ liệu bình thường với RecyclerView.

  1. Trước tiên, chúng tôi cần lưu vị trí đã nhấp, sau đó chúng tôi phải áp dụng notifyDataSetChanged().
  2. Sau đó khi danh sách làm mới kiểm tra vị trí đã lưu của bạn với vị trí liên kết thực tế của bạn, sau đó áp dụng thay đổi những gì bạn cần.

    public void onBindViewHolder (giữ thức MyViewHolder, int vị trí cuối cùng) {

    holder.tvGroupName.setText(list.get(position).getGroupName()); 
    
        holder.itemView.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
    
    
          // Save position in item click then refresh list 
          pos = position; 
          notifyDataSetChanged(); 
    
         } 
        }); 
    
        // Once all items started refreshing check your save position with actual position then change text 
        if (pos == position) { 
         holder.tvGroupName.setText("Testing"); 
        } 
    
    } 
    

Hope mẫu này hữu ích ..

Và,

Tôi cũng sửa đổi séc lớp học của bạn này và hy vọng nó sẽ hoạt động ..

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 
    private List<Animal> AnimalList; 
    public Context ctx; 
    public static int postionchange=-1; 

    public static Tab1Birds t1; 


    final int[] countLike = {0}; 
    //public static MediaPlayer mediaPlayer2 = new MediaPlayer(); 
    int pos; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public ImageView display; 
     public TextView nameTextView; 
     public ImageButton play,options,menubtn; 
     public MyViewHolder(View view) { 
      super(view); 
      nameTextView = (TextView) view.findViewById(R.id.nameTextView); 
      play=(ImageButton)view.findViewById(R.id.playbtn); 
      options=(ImageButton)view.findViewById(R.id.menubtn); 
      display=(ImageView)view.findViewById(R.id.imageview); 
      menubtn = (ImageButton) view.findViewById(R.id.menubtn); 
      //MediaPlayerClass.mediaPlayer= new MediaPlayer(); 
     } 
    } 
    public CustomAdapter(List<Animal> moviesList,Context ct) { 
     this.AnimalList = moviesList; 
     this.ctx=ct; 
    } 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.row_list, parent, false); 
     return new MyViewHolder(itemView); 
    } 
    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     final Animal animal = AnimalList.get(position); 

     final int[] previous = {position}; 
     holder.nameTextView.setText(animal.getName()); 
     holder.display.setImageResource(animal.getImageResource()); 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////// 
     holder.options.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       try { 
        if (MediaPlayerClass.mediaPlayer.isPlaying()) { 
         holder.play.setBackgroundResource(R.drawable.play_btn); 
         MediaPlayerClass.mediaPlayer.stop(); 
        } 
       } catch (Exception ex) { 
       } 
       Dialog dialog; 
       final String[] items = {"SET AS RING TUNE", "SET AS MESSAGE TUNE", "SET AS ALARM TUNE"}; 
       final ArrayList itemsSelected = new ArrayList(); 
       final AlertDialog.Builder builder = new AlertDialog.Builder(ctx); 
       builder.setTitle("OPTIONS"); 
       builder.setMultiChoiceItems(items, null, 
         new DialogInterface.OnMultiChoiceClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int selectedItemId, 
               boolean isSelected) { 
           if (isSelected) { 
            itemsSelected.add(selectedItemId); 
           } else if (itemsSelected.contains(selectedItemId)) { 
            itemsSelected.remove(Integer.valueOf(selectedItemId)); 
           } 
          } 
         }) 
         .setPositiveButton("Done!", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 
           Toast toast = Toast.makeText(ctx, "successfully selected", Toast.LENGTH_SHORT); 
           toast.show(); 
           SparseBooleanArray CheCked = ((AlertDialog) dialog).getListView().getCheckedItemPositions(); 
           String str = ""; 
           if (CheCked.get(0)) { 

            savering(animal.getSoundResource()); 
           } 
           if (CheCked.get(1)) { 
            savemsg(animal.getSoundResource()); 
           } 
           if (CheCked.get(2)) { 
            savealarm(animal.getSoundResource()); 
           } 
           // if (CheCked.get(3)) { 
           // DatabaseHelper.save_bookmarks(itemsList.get(position).getitemName(), R.drawable.play_btn, itemsList.get(position).getItemTuneSt()); 
           // Toast.makeText(ctx, "Item added to favourites", Toast.LENGTH_SHORT).show(); 

           // } 
          } 
         }) 
         .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 
          } 
         }); 
       dialog = builder.create(); 
       dialog.show(); 
       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
      } 
     }); 


     // for animation 
     // /////////////////////////// 
     //animate(holder);//Function for animation 
     ////////////////////////////// 

     holder.play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       pos=position; 
       notifyDataSetChanged();      

      } 
     }); 

     if (pos == position){ 

      holder.play.setBackgroundResource(R.drawable.pause_btn);// present state 
      MediaPlayerClass.play(animal.getSoundResource(),ctx); 
      if(countLike[0] ==0) 
      { 
       countLike[0] =1; 
      }else if(countLike[0] ==1) 
      { 
       //if is playing then Pause 
       if(MediaPlayerClass.mediaPlayer.isPlaying()) 
        MediaPlayerClass.mediaPlayer.stop(); 

       t1.recyclerView.setAdapter(null); 
       t1.customAdapter=new CustomAdapter(t1.animalList,ctx); 
       t1.recyclerView.setAdapter(t1.customAdapter); 


       holder.play.setBackgroundResource(R.drawable.play_btn); //sound stop show play button 
       countLike[0] =2; 
      } 
      if(countLike[0] >1) 
      { 
       countLike[0] =0; 
       holder.play.setBackgroundResource(R.drawable.play_btn); // click to play music, click again to stop music 

      } 
      //setOnCompletionListener 
      MediaPlayerClass.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mediaPlayer) { 
        holder.play.setBackgroundResource(R.drawable.play_btn); 
       } 
      }); 
      // MediaPlayerClass.mediaPlayer.start(); 
     }else { 
      holder.play.setBackgroundResource(R.drawable.play_btn); 
     } 
    } 
    @Override 
    public int getItemCount() { 
     return AnimalList.size(); 
    } 
    //animation 
    public void animate(RecyclerView.ViewHolder viewHolder) { 
     final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(ctx, R.anim.bounce_interpolator); 
     viewHolder.itemView.setAnimation(animAnticipateOvershoot); 
    } 

} 

@Rajesh

-1

Tôi không hiểu rõ luồng của bạn. Nhưng tôi có thể cho bạn một chút gợi ý.

Bạn có 'AnimalList'

cố gắng sử dụng notifyItemChanged (int vị trí, đối tượng payload);
và thêm biến sốState (boolean) để xác định mục nào đang phát ngay bây giờ. như bên dưới.

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int position) { 
    final Animal animal = AnimalList.get(position); 
    if(animal.isPlayStatus()){ 
     playButton.setSelected(true); 
    }else{ 
     playButton.setSelected(false); 
    } 
} 


public class Animal { 
    boolean playStatus; 
     . 
     . 
     . 

    public boolean isPlayStatus() { 
     return playStatus; 
    } 

    public void setPlayStatus(boolean playStatus) { 
     this.playStatus = playStatus; 
    } 
} 



Animal item = AnimalList.get(somePosition); 
item.setPlayStatus(true); 
notifyItemChanged(somePosition, item); 

or 

Animal previousItem = AnimalList.get(somePosition); 
Animal item = AnimalList.get(somePosition + 1); 
previousItem.setPlayStatus(false); 
item.setPlayStatus(true); 
mAdapter.notifyItemRangeChanged(somePosition, somePosition + 1); 

or 

int index = 0; 
for (Animal item : AnimalList) { 
    if(somePosition == index){ 
     item.setPlayStatus(true); 
    }else{ 
     item.setPlayStatus(false); 
    } 
    index++; 
} 
notifyItemRangeChanged(0, AnimalList.size()); // or 
notifyDatasetChanged(); 
+0

người đàn ông ... bạn không hiểu. –

0

Câu hỏi này cũng tương tự như

Multiple YouTubePlayerFragments inside a Horizontal ScrollView - all the players display the last loaded video

Bạn muốn thiết lập chơi & biểu tượng tạm dừng để mục danh sách của bạn tùy thuộc vào nếu tập tin âm thanh liên quan đến mục được chơi hay không.

// Set a global variable to keep track of which list item is playing. 
    // if it is -1 then no sound is playing 
    private int lastPosition = 0; 

Bây giờ bạn cần phải thêm isPlaying biến để giữ trong mô hình âm thanh của bạn

public class VideoModel { 

    private String audioURL; 
    private String imageURL; 
    private boolean isPlaying; 

    public VideoModel(String audioURL, boolean isSelected,String imageURL) { 
     this.videoURL = videoURL; 
     this.isPlaying = isSelected; 
    } 

    public boolean isPlaying() { 
     return isPlaying; 
    } 

    public void setPlaying(boolean playing) { 
     isPlaying = playing; 
    } 

    /** 
    * @return Audio URL 
    */ 
    public String getAudioURL() { 
     return audioURL; 
    } 

    /** 
    * @return Thumbnail of Animal 
    */ 
    public String getImageURL() { 
     return imageURL; 
    } 
} 

Bây giờ khi người dùng gõ vào bất kỳ mục trong danh sách của bạn, bạn cần phải cập nhật mục chơi cuối cùng và gán bây giờ đang chơi mục chơi cuối cùng mục

videoGridAdapter.setOnCardClickListner(new VideoGridAdapter.OnCardClickListner() { 
      @Override 
      public void OnCardClicked(View view, int position) { 

       //Make Lats Tapped item playing false 
       listOfAudio.get(lastPosition).setPlaying(false); 

       //Make current Tapped item playing true 
       listOfAudio.get(position).setPlaying(true); 

       // update pointer current tapped audio 
       lastPosition = position; 

       //LET RCYCLERVIEW ADAPTER DO THE MAGIC 
       videoGridAdapter.notifyDataSetChanged(); 
      } 
     }); 

Bạn cần phải quản lý ẩn hiển thị logic trong bộ chuyển đổi

// Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 
     VideoViewHolder videoHolder = (VideoViewHolder) holder; 

     if (VideoGridActivity.listOfAudio.get(position).isPlaying()) { 

      //Playing Video :- Show Pause Button and hide play button 
      ((VideoViewHolder) holder).getPauseButton().setVisibility(View.VISIBLE); 
      ((VideoViewHolder) holder).getPlayButton().setVisibility(View.GONE); 

      // Play sound and do other stuff 


     } else { 

      //Not playing make Hide Pause Button and SHow Play button 
      ((VideoViewHolder) holder).getPauseButton().setVisibility(View.GONE); 
      ((VideoViewHolder) holder).getPlayButton().setVisibility(View.VISIBLE); 

     } 
     } 

Đây là mã giả nhưng bạn có ý tưởng cách thực hiện việc này. Hy vọng nó giúp.

Các vấn đề liên quan