onclick image change on baseadapter

大憨熊 提交于 2019-12-23 05:18:21

问题


I want to change imageview source (and music of course) from onclicklistener. It is change, but first image changing every click. How can i fix it?

(Sorry for my bad English)

enter code here
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;
                }

回答1:


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



来源:https://stackoverflow.com/questions/16979592/onclick-image-change-on-baseadapter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!