I want to change imageview source (and music of course) from onclicklistener. It is changed, but first image changes on every click. How can i fix it?
This is my code:
public View getView(final int p, View v, ViewGroup arg2)
{
Log.w("BaseAdapter", "p: "+p+", preP: "+preP );
if (v == null)
v = li.inflate(R.layout.listview_item, null);
ImageView iv = (ImageView) v.findViewById(R.id.imageView1);
TextView baslik = (TextView) v.findViewById(R.id.textView1);
baslik.setText( isimler[p] );
if ( p == preP )
iv.setImageResource(R.drawable.stop);
v.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if( preP != p )
{
System.out.println("müzik çalışılacak.");
mPlay = MediaPlayer.create( getApplicationContext(), sarkilar[p] );
mPlay.start();
preP=p;
}
else
{
mPlay.stop();
preP=-1;
}
//getView(p, v, arg2);
initList();
}
});
return v;
}
You have to use a onItemClickListener
on your ListView
because this is the correct way to do it.
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View v, int pos,
long arg3) {
Item i = (Item) adapterView.getItemAtPosition(pos);
ImageView iv = (ImageView) v.findViewById(R.id.imageView1);
iv.setImageResource(R.drawable.your_image);
mPlay = MediaPlayer.create( getApplicationContext(), sarkilar[pos] );
mPlay.start();
}
});
OR
If I had to modify your code
v.setTag(p); //attach the position to your view
v.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
//How you get the correct ImageView
ImageView iv = (ImageView) v.findViewById(R.id.imageView1);
iv.setImageResource(R.drawable.your_image);
//The position is attached to the Clicked view
int position = (int) v.getTag();
if( preP != position )
{
System.out.println("müzik çalışılacak.");
mPlay = MediaPlayer.create( getApplicationContext(), sarkilar[position] );
mPlay.start();
preP=position;
}
else
{
mPlay.stop();
preP=-1;
}
//getView(p, v, arg2);
initList();
}
});
But personally I would not use the second approach