2016-07-21 6 views
10
  1. Ich spiele eine Audio von Uri seine Arbeit gut.
  2. Klicken Sie auf einen Button aus jedem Listview Element.

Problem: Audio spielt in der Listview, aber immer noch SeekBar bewegt sich nicht (aktualisiert).Audio Wiedergabe von URI in Listview, aber Seekbar wird nicht in Android aktualisiert. Listview item

EDIT: 1

1. Audio ist in der jeder Listview-Element Spielen Perfekt, Aber SeekBar funktioniert nicht (nicht aktualisiert).

Bitte helfen Sie mir, dieses Problem zu lösen.

Mein Listview Array Adapter Klasse:

Adapter.class

 private static final int UPDATE_FREQUENCY = 500; 

int progress=0; 

     public View getView(final int position, View view, ViewGroup parent) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      View rowView = inflater.inflate(R.layout.audio_listview, null, true); 


      ListenAUdioButton = (Button) rowView.findViewById(R.id.ListenAudiobuttonxml); 
      seek_bar_view = (SeekBar) rowView.findViewById(R.id.seek_bar); 
      ListenAUdioButton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // text_shown.setText("Playing..."); 
        try { 


         try { 
          // get Internet status 
          isInternetPresent = cd1.isConnectingToInternet(); 
          // check for Internet status 
          if (isInternetPresent) { 
           if (!itemname3_AUDIO_FILE[position].equals("") || !itemname3_AUDIO_FILE[position].equals("null")) { 
            System.out.println(" AUDIO FILE :-)" + itemname3_AUDIO_FILE[position]); 

            player = new MediaPlayer(); 
            player.setAudioStreamType(AudioManager.STREAM_MUSIC); 

            player.setDataSource(context, Uri.parse(itemname3_AUDIO_FILE[position])); 
            player.prepareAsync(); 


            player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
             @Override 
             public void onPrepared(MediaPlayer mp) { 
              try { 

               mp.start(); 

               seek_bar_view.setMax(player.getDuration()); 
               updatePosition(); 


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


            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
             @Override 
             public void onCompletion(MediaPlayer mp) { 
              stopPlay(); 
             } 
            }); 


            MediaPlayer.OnErrorListener onError = new MediaPlayer.OnErrorListener() { 

             @Override 
             public boolean onError(MediaPlayer mp, int what, int extra) { 
              // returning false will call the OnCompletionListener 
              return false; 
             } 
            }; 


           } else { 
            Toast.makeText(getContext(), "Audio Not Found..!", Toast.LENGTH_SHORT).show(); 
           } 

          } else { 

           Toast.makeText(getContext(), "Please Check Your Internet Connection..!", Toast.LENGTH_SHORT).show(); 

          } 

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

          Toast.makeText(getContext(), "Audio Not Found..!", Toast.LENGTH_SHORT).show(); 

         } 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
      return rowView; 
     } 

     private void stopPlay() { 
      player.stop(); 
      player.reset(); 
      // playButton.setImageResource(android.R.drawable.ic_media_play); 
      handler.removeCallbacks(updatePositionRunnable); 
      seek_bar_view.setProgress(0); 

      // isStarted = false; 
     } 


     private final Handler handler = new Handler(); 

     private final Runnable updatePositionRunnable = new Runnable() { 
      public void run() { 
       updatePosition(); 
      } 
     }; 



private void updatePosition() 
    { 
     handler.removeCallbacks(updatePositionRunnable); 

     seek_bar_view.setProgress(progress); 
progress=getProgressPercentage(player.getCurrentPosition(),player.getDuration(); 
     notifyDataSetChanged(); 

     handler.postDelayed(updatePositionRunnable, UPDATE_FREQUENCY); 

    } 

Antwort

1

sehen:

seek_bar_view.setProgress(player.getCurrentPosition()); 

hier player.getCurrentPosition() gibt die Zeit in Millis, müssen Sie um dies in int umzuwandeln und dann den Fortschritt auf seekBar zu setzen.

Versuchen Sie folgendes:

public static int getProgressPercentage(long currentDuration, long totalDuration){ 
    Double percentage = (double) 0; 

    long currentSeconds = (int) (currentDuration/1000); 
    long totalSeconds = (int) (totalDuration/1000); 

    // calculating percentage 
    percentage =(((double)currentSeconds)/totalSeconds)*100; 

    // return percentage 
    return percentage.intValue(); 
} 

und jetzt den Prozentsatz für SeekBar- wie diese:

int currentProgress=getProgressPercentage(player.getCurrentPosition(), player.getDuration()); 

seek_bar_view.setProgress(currentProgress); 

Edited:

Für Ihre speziellen Fall in einem Listview-Element:

Sie müssen den Adapter jedes Mal benachrichtigen, wenn Sie die Position der Suchleiste ändern. Dafür wäre der einfachste Ansatz, eine Variable innerhalb der POJO-Klasse zu nehmen, die Sie verwenden, um den Adapter festzulegen.

In Ihrer POJO Klasse

int progress=0; 

In Ihrem Adapter, stellen Sie den seekbar Fortschritt

seekbar.setProgress(progress); 

In Ihrem Adapter, um den Wert des Fortschritts ändern und notifyadapter

progress=getProgressPercentage(player.getCurrentPosition(), player.getDuration()); 
notifyDataSetChanged() 

// Re-Edited:

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {   

@Override   
public void onStopTrackingTouch(SeekBar seekBar) {  
    // TODO Auto-generated method stub  
}   

@Override   
public void onStartTrackingTouch(SeekBar seekBar) {  
    // TODO Auto-generated method stub  
}   

@Override   
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {  
    // TODO Auto-generated method stub  

    notifyDataSetChanged(); 

}   
});   
+0

Sorry, kann ich testen Sie Ihr Code nicht jetzt. Siehe dieses Tutorial, http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/. Es wird definitiv helfen. –

+0

Ich habe meine Antwort bearbeitet –

+0

Funktioniert immer noch nicht in Listview Audio Plating Perfekt, aber Seekbar bleiben immer noch gleich. – Kumar

4

Sie benötigen, um Ihre seekbar Position (Wert) bei jedem zweiten aktualisieren ..

seekbar Max Wert zu setzen ..

seek_bar_view.setMax((int) player.getDuration()); 

und aktualisieren Sie es jeder zweite Fortschritt zeigen

Handler mHandler = new Handler(); 
    runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          seek_bar_view.setProgress((int) player.getCurrentPosition()); 
         } 
         mHandler.postDelayed(this,1000); 
        } 
    ); 
+0

in meinem Code, wo ich diese Änderung vornehmen muss.wenn Onclicked Listenansicht Element – Kumar

+0

, wenn Sie das Audio abspielen –

Verwandte Themen