zoukankan      html  css  js  c++  java
  • listview+seekbar问题的解决

    最近做了个项目,其中有录音播放功能。每次录音结束都会在listView中显示,在listView中能播放每次的录音,也可以每条录音之间的切换播放。随之就引发了许多的问题,比如当我播放第一条录音的时所有的Seekbar都跟着动。我在listView用一个按钮控制播放与暂停,当第一次点击按钮时按钮的背景图片更换播放录音,第二次点击按钮时按钮的背景图片更换暂停录音。这又会引发其他的控件也会改变,一系列的问题。

    解决问题的代码如下:

      1 package net.ijoysoft.notes.adapter;  
      2   
      3 import java.io.File;  
      4 import java.text.SimpleDateFormat;  
      5 import java.util.ArrayList;  
      6 import java.util.Date;  
      7 import java.util.List;  
      8 import java.util.Timer;  
      9 import java.util.TimerTask;  
     10   
     11 import net.ijoysoft.notes.ui.NoteEditActivity;  
     12 import net.ijoysoft.notes.uti.Util;  
     13   
     14 import com.tools.enotes.R;  
     15   
     16 import android.content.Context;  
     17 import android.media.MediaPlayer;  
     18 import android.media.MediaPlayer.OnCompletionListener;  
     19 import android.net.Uri;  
     20 import android.os.Handler;  
     21 import android.test.UiThreadTest;  
     22 import android.util.Log;  
     23 import android.view.LayoutInflater;  
     24 import android.view.View;  
     25 import android.view.View.OnClickListener;  
     26 import android.view.ViewGroup;  
     27 import android.widget.BaseAdapter;  
     28 import android.widget.Button;  
     29 import android.widget.SeekBar;  
     30 import android.widget.SeekBar.OnSeekBarChangeListener;  
     31 import android.widget.TextView;  
     32   
     33 public class RecordListAdapter extends BaseAdapter {  
     34     public int thisPosition = -1;  
     35     public MediaPlayer mMediaPlayer = new MediaPlayer();  
     36     public boolean isPlay = true;  
     37     public boolean isFiring = false;  
     38     public List<Integer> a = new ArrayList<Integer>();  
     39     private Context context;  
     40     private LayoutInflater inflater;  
     41     private List<File> Mdata = null;  
     42   
     43     public RecordListAdapter(Context context, List<File> mdata) {  
     44         super();  
     45         this.context = context;  
     46         Mdata = mdata;  
     47         inflater = LayoutInflater.from(context);  
     48     }  
     49   
     50     @Override  
     51     public int getCount() {  
     52         return Mdata == null ? 0 : Mdata.size();  
     53     }  
     54   
     55     @Override  
     56     public Object getItem(int position) {  
     57         return Mdata.get(position);  
     58     }  
     59   
     60     @Override  
     61     public long getItemId(int position) {  
     62         return position;  
     63     }  
     64   
     65     private Timer timer;  
     66   
     67     @Override  
     68     public View getView(int position, View convertView, ViewGroup parent) {  
     69         final RecordViewHold holder;  
     70         final int sign = position;  
     71         if (convertView == null) {  
     72             convertView = inflater  
     73                     .inflate(R.layout.data_record_list_item, null);  
     74             holder = new RecordViewHold();  
     75             holder.record_play = (Button) convertView  
     76                     .findViewById(R.id.note_play);  
     77             holder.record_seek = (SeekBar) convertView  
     78                     .findViewById(R.id.note_seekBar);  
     79             holder.record_time = (TextView) convertView  
     80                     .findViewById(R.id.note_time);  
     81             holder.record_delete = (Button) convertView  
     82                     .findViewById(R.id.note_delete);  
     83             holder.record_play.setTag(sign);  
     84             convertView.setTag(holder);  
     85         } else {  
     86             holder = (RecordViewHold) convertView.getTag();  
     87         }  
     88         Uri uri = Uri.fromFile(Mdata.get(sign));  
     89         MediaPlayer mMediaPlayer1 = MediaPlayer.create(context, uri);  
     90         SimpleDateFormat format = new SimpleDateFormat("mm:ss");  
     91         Date date = new Date(mMediaPlayer1.getDuration());  
     92         String time = format.format(date);  
     93         holder.record_time.setText(time);  
     94         //控制控件背景图片的改变  
     95         switch (thisPosition) {  
     96         case -1:  
     97               
     98             break;  
     99         default:  
    100             if(thisPosition!= sign){  
    101                 holder.record_play  
    102                 .setBackgroundResource(R.drawable.data_play);  
    103             }  
    104             break;  
    105         }  
    106           
    107         holder.record_play.setOnClickListener(new OnClickListener() {  
    108   
    109             @Override  
    110             public void onClick(View v) {  
    111                 thisPosition = sign;  
    112                 int tag = (Integer) v.getTag();  
    113                 Log.i("jjf", "tag的值" + tag);  
    114                 Log.i("jjf", "sign的值" + sign);  
    115                 //根据点击的item中的值判断是否是同一个按钮  
    116                 if (a.size() != 0) {  
    117                     if (a.get(0) != sign) {  
    118                         mMediaPlayer.pause();  
    119                         isPlay = true;  
    120                         isFiring = false;  
    121                         if (timer != null) {  
    122                             timer.cancel();  
    123                             timer = null;  
    124                         }  
    125                     }  
    126                 }  
    127                     if (isPlay) {// 播放录音  
    128                         Uri uri = Uri.fromFile(Mdata.get(sign));  
    129                         a.clear();  
    130                         a.add(tag);  
    131                         // 播放录音  
    132                         mMediaPlayer = MediaPlayer.create(context, uri);  
    133                         holder.record_seek.setMax(mMediaPlayer.getDuration());  
    134                         SimpleDateFormat format = new SimpleDateFormat("mm:ss");  
    135                         Date date = new Date(mMediaPlayer.getDuration());  
    136                         String time = format.format(date);  
    137                         holder.record_time.setText(time);  
    138                         isFiring = true;  
    139                         mMediaPlayer.start();  
    140                         timer = new Timer();  
    141                         final Handler handler = new Handler();  
    142                         timer.schedule(new TimerTask() {  
    143                             @Override  
    144                             public void run() {  
    145                                 handler.post(new Runnable() {  
    146                                     @Override  
    147                                     public void run() {  
    148                                         if (isFiring) {  
    149                                             holder.record_seek.setProgress(mMediaPlayer  
    150                                                     .getCurrentPosition());  
    151                                         }  
    152                                     }  
    153                                 });  
    154   
    155                             }  
    156                         }, 100, 100);  
    157                         mMediaPlayer  
    158                                 .setOnCompletionListener(new OnCompletionListener() {  
    159   
    160                                     @Override  
    161                                     public void onCompletion(MediaPlayer mp) {  
    162                                         holder.record_play  
    163                                                 .setBackgroundResource(R.drawable.data_play_default);  
    164                                         isPlay = true;  
    165                                         if (timer != null) {  
    166                                             timer.cancel();  
    167                                             timer = null;  
    168                                         }  
    169                                     }  
    170                                 });  
    171   
    172                         holder.record_play  
    173                                 .setBackgroundResource(R.drawable.start_play_default);  
    174                         isPlay = false;  
    175                     } else {  
    176                         mMediaPlayer.pause();  
    177                         holder.record_play  
    178                                 .setBackgroundResource(R.drawable.data_play_default);  
    179                         isPlay = true;  
    180                         isFiring = false;  
    181                         if (timer != null) {  
    182                             timer.cancel();  
    183                             timer = null;  
    184                         }  
    185                     }  
    186                     //按钮点击发生变化重绘item  
    187                     notifyDataSetChanged();  
    188                 }         
    189         });  
    190         holder.record_seek  
    191                 .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {  
    192   
    193                     @Override  
    194                     public void onStopTrackingTouch(SeekBar arg0) {  
    195                     }  
    196   
    197                     @Override  
    198                     public void onStartTrackingTouch(SeekBar arg0) {  
    199                     }  
    200   
    201                     @Override  
    202                     public void onProgressChanged(SeekBar seekBar,  
    203                             int progress, boolean fromUser) {  
    204                         if (fromUser == true) {  
    205                             // mMediaPlayer.seekTo(progress);  
    206                             holder.record_seek.setProgress(progress);  
    207                             holder.record_play  
    208                                     .setBackgroundResource(R.drawable.data_play_default);  
    209                         }  
    210                     }  
    211                 });  
    212         holder.record_delete.setOnClickListener(new OnClickListener() {  
    213   
    214             @Override  
    215             public void onClick(View v) {  
    216   
    217                 Log.i("jjf", "Mdata的值:" + Mdata.size());  
    218                 Util.deleteFolder(Mdata.remove(sign));  
    219                 Log.i("jjf", "Mdata的值:" + Mdata.size());  
    220                     if (isFiring) {  
    221                         mMediaPlayer.pause();  
    222                 }  
    223                 notifyDataSetChanged();  
    224             }  
    225         });  
    226   
    227         return convertView;  
    228     }  
    229     public void stopMedia(){  
    230         if (mMediaPlayer.isPlaying()) {  
    231             mMediaPlayer.pause();  
    232         }  
    233     }  
    234   
    235 }  
    236   
    237 class  RecordViewHold {  
    238     Button record_play, record_delete;  
    239     SeekBar record_seek;  
    240     TextView record_time;  
    241 }  

    转自:http://blog.csdn.net/dylan_null/article/details/41257441

  • 相关阅读:
    java final keyword
    2014暑假集训组队赛01
    簡單SQL存儲過程實例
    amazeui学习笔记--css(布局相关3)--辅助类Utility
    amazeui学习笔记--css(布局相关2)--等分网格 AVG Grid
    amazeui学习笔记--css(布局相关1)--网格Grid
    css中hack是什么
    amazeui学习笔记--css(基本样式4)--打印样式Print
    什么是字体锯齿和反锯齿
    衬线字体和非衬线字体区别
  • 原文地址:https://www.cnblogs.com/zl1991/p/5355509.html
Copyright © 2011-2022 走看看