Listview 在滚动条上重置图标

Listview 在滚动条上重置图标,listview,scroll,Listview,Scroll,我有以下适配器: package studios.verso.instrumentalringtones; import android.content.Context; import android.media.MediaPlayer; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import andr

我有以下适配器:

package studios.verso.instrumentalringtones;

import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MyBaseAdapter extends BaseAdapter {

    ArrayList<ListData> myList = new ArrayList<ListData>();
    LayoutInflater inflater;
    Context context;
    static boolean playing = false;
    static int pause_button_position = -1;



    public MyBaseAdapter(Context context, ArrayList<ListData> myList) {
        this.myList = myList;
        this.context = context;
        inflater = LayoutInflater.from(this.context);    // only context can also be used
    }

    @Override
    public int getCount() {
        return myList.size();
    }

    @Override
    public ListData getItem(int position) {
        return myList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    MediaPlayer mp = new MediaPlayer();
    @Override

    public View getView(int position, View convertView, ViewGroup parent) {
        MyViewHolder mViewHolder;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listview_item_row, null);
            mViewHolder = new MyViewHolder();
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (MyViewHolder) convertView.getTag();
        }


        mViewHolder.tvTitle = detail(convertView, R.id.txtTitle, myList.get(position).getTitle());
        mViewHolder.tvDesc = detail(convertView, R.id.textView1, myList.get(position).getDescription());
        //mViewHolder.ivIcon = detail(convertView, R.id.imgIcon, myList.get(position).getImgResId());

        TextView tv = (TextView) convertView.findViewById(R.id.txtTitle);
        tv.setText("Testtt" + position);
        final int pos = position;


        final ImageView iv = (ImageView) convertView.findViewById(R.id.imgIcon);
        iv.setTag(position); //attach the position to your view
        iv.setImageResource(R.drawable.play_ic);



        iv.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                    try {
                        if (playing) {
                            Toast.makeText(context,
                                    "mMediaPlayer.isPlaying()",
                                    Toast.LENGTH_LONG).show();

                            try {
                                mp.stop();
                                mp.release();
                                playing = false;

                                iv.setImageResource(R.drawable.play_ic);
                                notifyDataSetChanged();
                            } catch (Exception e) {
                                // TODO: handle exception
                                Toast.makeText(context, e + "",
                                        Toast.LENGTH_LONG).show();
                            }

                        } else {

                            iv.setImageResource(R.drawable.pause_ic);
                            pause_button_position = pos; //add
                            playing = true;

                            mp = MediaPlayer.create(context, R.raw.accordion_golden1);
                            //mp.prepare();
                            mp.start();
                            pause_button_position = pos;
                            Toast.makeText(context,
                                    "mMediaPlayer.start " + playing, Toast.LENGTH_LONG)
                                    .show();
                            notifyDataSetChanged();

                        }
                    } catch (Exception e) {
                        Toast.makeText(context, e + "" + ".....",
                                Toast.LENGTH_LONG).show();
                    }
                }
        });

        return convertView;
    }

    // or you can try better way
    private TextView detail(View v, int resId, String text) {
        TextView tv = (TextView) v.findViewById(resId);
        tv.setText(text);
        return tv;
    }

    private ImageView detail(View v, int resId, int icon) {
        ImageView iv = (ImageView) v.findViewById(R.id.imgIcon);
        iv.setImageResource(icon); //

        return iv;
    }

    private class MyViewHolder {
        TextView tvTitle, tvDesc;
        ImageView ivIcon;
    }

}
package studios.verso.instrumentalringtones;
导入android.content.Context;
导入android.media.MediaPlayer;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
导入java.util.List;
公共类MyBaseAdapter扩展了BaseAdapter{
ArrayList myList=新的ArrayList();
充气机;
语境;
静态布尔播放=假;
静态int暂停按钮位置=-1;
公共MyBaseAdapter(上下文,ArrayList myList){
this.myList=myList;
this.context=上下文;
flatter=LayoutInflater.from(this.context);//只能使用context
}
@凌驾
public int getCount(){
返回myList.size();
}
@凌驾
public ListData getItem(int位置){
返回myList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
MediaPlayer mp=新的MediaPlayer();
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
MyViewHolder mViewHolder;
if(convertView==null){
convertView=充气机。充气(R.layout.listview\u item\u row,空);
mViewHolder=新的MyViewHolder();
setTag(mViewHolder);
}否则{
mViewHolder=(MyViewHolder)convertView.getTag();
}
mViewHolder.tvTitle=detail(convertView、R.id.txtTitle、myList.get(position.getTitle());
mViewHolder.tvDesc=detail(convertView,R.id.textView1,myList.get(position.getDescription());
//mViewHolder.ivIcon=detail(convertView、R.id.imgIcon、myList.get(position.getImgResId());
TextView tv=(TextView)convertView.findViewById(R.id.txtTitle);
tv.setText(“Testtt”+位置);
最终int pos=位置;
最终ImageView iv=(ImageView)convertView.findViewById(R.id.imgIcon);
iv.setTag(位置);//将位置附加到视图中
iv.setImageResource(R.drawable.play_ic);
iv.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
如果(玩){
Toast.makeText(上下文,
“mmediplayer.isPlaying()”,
Toast.LENGTH_LONG).show();
试一试{
mp.stop();
mp.release();
玩=假;
iv.setImageResource(R.drawable.play_ic);
notifyDataSetChanged();
}捕获(例外e){
//TODO:处理异常
Toast.makeText(上下文,e+“”,
Toast.LENGTH_LONG).show();
}
}否则{
iv.setImageResource(R.drawable.pause_ic);
暂停按钮位置=位置;//添加
玩=真;
mp=MediaPlayer.create(上下文,R.raw.accordion\u golden1);
//mp.prepare();
mp.start();
暂停按钮位置=位置;
Toast.makeText(上下文,
“mmediplayer.start”+播放、吐司、长度(长)
.show();
notifyDataSetChanged();
}
}捕获(例外e){
Toast.makeText(上下文,e++“…”,
Toast.LENGTH_LONG).show();
}
}
});
返回视图;
}
//或者你可以尝试更好的方法
私有文本视图详细信息(视图v、整型剩余、字符串文本){
TextView电视=(TextView)v.findViewById(剩余);
tv.setText(文本);
返回电视;
}
私有图像视图详细信息(视图v、整数剩余、整数图标){
ImageView iv=(ImageView)v.findViewById(R.id.imgIcon);
iv.setImageResource(图标)//
回报四;
}
私有类MyViewHolder{
文本视图tvTitle,tvDesc;
ImageView-ivIcon;
}
}
例如,如果我点击play img,声音将正常播放,再次点击img将停止,图标正在更改

如果我点击第一行的播放图标,在我向上或向下滚动播放图标后,播放图标将从播放重置为暂停,音乐仍在播放,这是正常的

我能做些什么来取消滚动更新?

所以我找到了答案! 对于初学者来说很难理解一些简单的事情! 我这样做的方式是: 我创建了和数组,并在这个数组中添加了每次单击的位置。 所以在创建行之后,我在viewholder中检查行是否添加到数组中