在baseadapter的onclick图像变化 [英] onclick image change on baseadapter

查看:132
本文介绍了在baseadapter的onclick图像变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从onclicklistener改变ImageView的来源(当然音乐)。它是变化的,但第一个图像改变每次点击。我该如何解决呢?

(对不起,我英文不好)

 在此输入code
公共查看getView(最终诠释P,视图V的ViewGroup以及ARG2)
            {
                    Log.w(BaseAdapter,P:+ P +,preP:+ preP);                    如果(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]);                    如果(P = = preP)
                        iv.setImageResource(R.drawable.stop);                    v.setOnClickListener(新View.OnClickListener()
                    {
                        公共无效的onClick(视图v)
                        {
                            如果($ P $的pP!= P)
                            {
                                的System.out.println(MUZIKçalışılacak。);
                                mPlay = MediaPlayer.create(getApplicationContext(),sarkilar [P]);
                                mPlay.start();
                                $ P $的pP = P;
                            }
                            其他
                            {
                                mPlay.stop();
                                $ P $的pP = -1;
                            }                            // getView(P,V,ARG2);
                            initList();
                        }
                    });                    返回伏;
                }


解决方案

您必须使用 onItemClickListener 的ListView 因为这是做的正确方法。

  listView.setOnItemClickListener(新OnItemClickListener(){        公共无效onItemClick(适配器视图<>适配器视图,视图V,INT POS机,
                                长ARG3){
            项目I =(项目)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();
        }
    });

如果我不得不修改code

  v.setTag(P); //附着的位置到您的视图
    v.setOnClickListener(新View.OnClickListener()
    {
        公共无效的onClick(视图v)
        {
            //你如何得到正确的ImageView
            ImageView的IV =(ImageView的)v.findViewById(R.id.imageView1);
            iv.setImageResource(R.drawable.your_image);            //位置连接到单击视图
            INT位置=(int)的v.getTag();            如果($ P $的pP!=位置)
            {
                的System.out.println(MUZIKçalışılacak。);
                mPlay = MediaPlayer.create(getApplicationContext(),sarkilar [位置]);
                mPlay.start();
                $ P $压PP =位置;
            }
            其他
            {
                mPlay.stop();
                $ P $的pP = -1;
            }            // getView(P,V,ARG2);
            initList();
        }
    });

但我个人不会使用第二种方法

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;
                }

解决方案

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

这篇关于在baseadapter的onclick图像变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆