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中检查行是否添加到数组中