2017-04-07 16 views
5

हैलो लोग आशा करते हैं कि आप सभी ठीक हैं। मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं जो जानवरों की विभिन्न आवाज़ें बजाएगा।रीसायकल व्यू के पिछले आइटम पंक्ति दृश्य के दृश्य को रीफ्रेश करने के लिए कैसे करें

मैं रीसायकल व्यू का उपयोग कर रहा हूं जैसा कि आप नीचे स्क्रीनशॉट में देख सकते हैं। अब मुझे एक समस्या का सामना करना पड़ रहा है, मेरे पास मेरी पंक्ति के अंदर एक प्ले बटन है जो कि जब भी मैं अपने आइटम 0 से ध्वनि बजाता हूं या किसी भी स्थिति में यह ध्वनि की आवाज बजा रहा है, तो यह मुझे दृश्य के अंदर विकल्प रोकता है। लेकिन जब भी मैं अगले आइटम 1 या किसी अन्य पर क्लिक करता हूं तो यह पिछले आइटम की छवि को नहीं बदल रहा है 0.

मैं निम्नलिखित कोड का उपयोग कर एडाप्टर की अपनी सूची को रीफ्रेश करके कर रहा हूं। लेकिन मुझे लगता है कि यह एक अच्छा अभ्यास नहीं है।

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

मैं notifyItemChanged(oldPosition) की तरह हर चीज उपयोग करने की कोशिश, लेकिन अभी भी havent मेरी वांछित परिणाम मिल गया।!

कृपया मुझे हल करने का एक उचित तरीका सुझाएं? मैं एंड्रॉइड के लिए नया हूं और मेरे पास पिछले आइटम को देखने और इसे पहले सहेजने के लिए एक विचार है, तो मुझे वह दृश्य मिलता है और मेरे पिछले सूची बटन पर डिफ़ॉल्ट छवि प्ले सेट करता है लेकिन मुझे नहीं पता कि यह कैसे करें?

यहां कस्टम एडाप्टर का मेरा कोड है!

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

यहाँ संगीत खिलाड़ी का एक उदाहरण सैमसंग मोबाइल्स में है।! जब भी मैं संगीत बजाता हूं तो यह एनीमेशन दिखाता है और जब मैं अगला गीत चलाता हूं तो वह उस गीत को चलाता है और पिछले बजाने वाले संगीत और इसकी एनीमेशन को रोकता है। मुझे पता है कि मीडिया प्लेयर को कैसे रोकें, लेकिन एनीमेशन या संगीत लाइब्रेरी इत्यादि को कैसे रोकें?

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

Samsung media Player

+0

क्या आप हमें कुछ कोड के साथ साबित कर सकते हैं? मुझे लगता है कि हम जो भी बना रहे हैं उसे देखे बिना हम आपकी मदद नहीं कर सकते हैं। – Jay

+0

@Jay कोड जोड़ा गया। इस पर एक नज़र डालो।! –

+0

मैं इसे उत्तर देने के लिए किसी के लिए खोज रहा हूँ। –

उत्तर

0

Bellow नमूना RecyclerView साथ एक सामान्य सूची डेटा के लिए काम करता है।

  1. सबसे पहले हमें क्लिक की गई स्थिति को सहेजने की आवश्यकता है तो हमें सूचित करना होगाडेटाट चेंज()।
  2. उसके बाद जब सूची ताज़ा करने से आपकी सहेजी गई स्थिति को आपकी वास्तविक स्थिति के साथ जांचें तो आपको जो भी चाहिए उसे लागू करें।

    सार्वजनिक शून्य onBindViewHolder (अंतिम MyViewHolder धारक, अंतिम पूर्णांक स्थिति) {

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

आशा इस नमूने उपयोगी ..

और,

मैं भी अपने वर्ग इस चेक संशोधित और उम्मीद है कि यह काम करेगा ..

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

} 

@ राजेश

-1

मैं आपके प्रवाह को काफी समझ नहीं पा रहा हूं। लेकिन मैं आपको थोड़ा संकेत दे सकता हूं।

आपके पास 'AnimalList'

कोशिश notifyItemChanged (पूर्णांक स्थिति, वस्तु पेलोड) का उपयोग करने के लिए;
और यह निर्धारित करने के लिए कि कौन सा आइटम चल रहा है, कुछ स्टेट वैरिएबल (बूलियन) जोड़ें। नीचे की तरह।

@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

आदमी ... आपको यह नहीं मिला .. –

0

यह सवाल करने के लिए

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

आप ध्वनि फ़ाइल लिंक किया था तो उस आइटम या नहीं चल रहा है करने के लिए पर निर्भर करता है आपके सूची आइटम पर खेलने & ठहराव आइकन सेट करना चाहते हैं समान है।

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

अब आप अपने ऑडियो मॉडल में रखने के लिए

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

अब जब अपनी सूची में किसी भी आइटम पर उपयोगकर्ता नल आप पिछले खेल आइटम अद्यतन और अब आइटम खेलने सौंपने होंगे isPlaying चर जोड़ने की जरूरत पिछले खेल आइटम

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

आप एडाप्टर में छिपाएं दिखाएं तर्क प्रबंधन करने की आवश्यकता

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

     } 
     } 

यह एक छद्म कोड है लेकिन आपको यह पता चल गया कि यह कैसे करें। आशा करता हूँ की ये काम करेगा।

संबंधित मुद्दे