5

Hallo Leute, ich hoffe, euch allen geht es gut. Ich entwickle eine Android-App, die verschiedene Geräusche von Tieren spielen wird.wie die Ansicht der vorherigen Elementansicht der Ansicht von Recycling Ansicht aktualisieren

Ich benutze Recycle View, wie Sie auf dem Screenshot unten sehen können. Jetzt habe ich ein Problem, ich habe eine Play-Taste in meiner Zeile, die den Sound des Tieres spielt, wenn ich den Sound von meinem Gegenstand 0 oder einer anderen Position spiele. Aber wenn ich auf nächstes Element 1 oder ein anderes Element klicke, wird das Bild des vorherigen Elements 0 nicht geändert.

Ich mache es, indem ich meine Liste mit dem folgenden Code aktualisiere.! aber ich denke es ist keine gute Praxis.!

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

Ich habe versucht, alles wie notifyItemChanged(oldPosition) verwenden, aber noch havent meine gewünschte Ergebnis bekam.!

Bitte schlagen Sie mir einen geeigneten Weg, um das zu lösen? Ich bin neu bei Android und ich habe einen Gedanken daran, den letzten Gegenstand zu sehen und ihn zuerst zu speichern, dann bekomme ich diese Ansicht und setze die Standardbildwiedergabe auf meiner vorherigen Listenschaltfläche, aber ich weiß nicht, wie ich das machen soll?

hier ist mein Code von Custom Adapter.!

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

Hier ist ein Beispiel für Musik-Player Samsung Mobiles.! Wann immer ich Musik spiele, zeigt es Animation und wenn ich das nächste Lied spiele, spielt es dieses Lied und stoppt die vorhergehende Musikwiedergabe und ihre Animation.! Ich weiß, wie Media Player zu stoppen, aber wie zu ändern, stoppen Animation oder Musikbibliothek usw.?

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

Samsung media Player

+0

Können Sie uns etwas Code zur Verfügung stellen? Ich denke, wir können nicht helfen, ohne zu sehen, was du machst. – Jay

+0

@Jay-Code hinzugefügt.! Schau es dir an.! –

+0

Ich suche jemanden, der es beantwortet.! –

Antwort

0

Bellow Probe arbeitet für eine normale Listendaten mit RecyclerView.

  1. Zuerst müssen wir die angeklickte Position speichern, dann müssen wir notifyDataSetChanged() anwenden.
  2. Danach bei der Aktualisierung der Liste überprüfen Sie Ihre gespeicherte Position mit Ihrer tatsächlichen Bindungsposition dann wenden Sie Änderungen an, was Sie brauchen.

    public void onBindViewHolder (endgültige MyViewHolder Halter Position final int) {

    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"); 
        } 
    
    } 
    

Hoffnung diese Probe hilfreich ..

Und

I modifiziert auch die Klasse Prüfung dieses und hoffe, dass es funktioniert.

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

Ich verstehe nicht ganz Ihren Fluss. Aber ich kann dir einen kleinen Hinweis geben.

Sie haben 'Animal'

try notifyItemChanged (int Position, Objekt Nutzlast) zu verwenden;
und fügen Sie someState Variable (boolean) hinzu, um zu bestimmen, welches Element gerade abgespielt wird. wie unten.

@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

Mann ... Sie bekommen es nicht .. –

0

Diese Frage ist ähnlich wie

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

Sie wollen je nach Spiel & Symbol Pause auf Ihrer Liste Element setzen, wenn Tondatei verknüpft das Element oder nicht spielt.

// 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; 

Jetzt müssen Sie isPlaying Variable hinzuzufügen in Ihrem Audio-Modell halten

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; 
    } 
} 

Nun, wenn der Benutzer tippen auf ein Element in der Liste zuletzt Spiel Artikel zu aktualisieren und weisen jetzt Artikel zu spielen letzte Spiel Artikel

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(); 
      } 
     }); 

Sie müssen ausblenden einblenden Logik in Adapter verwalten

// 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); 

     } 
     } 

Dies ist ein Pseudo-Code, aber Sie haben eine Idee, wie Sie dies tun. Ich hoffe es hilft.

Verwandte Themen