событие android onClick не запускается - PullRequest
1 голос
/ 20 сентября 2010

Мне действительно нужна помощь по этому вопросу, потому что это единственное, что не работает в моем приложении. У меня есть список, управляемый адаптером, который расширяет BaseAdapter.

В функции getview я использую convertView для настройки OnClickListener. Этот OnClickListener хорошо работает, когда я касаюсь экрана, но если я использую трекбол HTC Desire, я вижу строку, мигающую на экране, но OnClickListener не называется ...

Я прочитал руководство разработчика Android: http://developer.android.com/guide/topics/ui/ui-events.html и говорят, что я должен получить событие onClick от трекбола ...

Я помещаю сюда свой код getview на случай, если кто-нибудь увидит что-то странное. Если у вас есть идеи о том, что я могу сделать, пожалуйста, дайте мне знать.

public View getView(int position, View convertView, ViewGroup parent) {
        //ici on va utiliser un mécanisme de cache avec le Tag Holder
        MyTag holder;           
        if (convertView == null){
            //On se branche sur le bon layout
            // convertView = inflater.inflate(android.R.layout.simple_list_item_2, null)
             convertView = inflater.inflate(R.layout.twolines, null);
            holder          = new MyTag();
            //on récupère les éléments du layout dans le holder
            holder.txtData  = (TextView)convertView.findViewById(R.id.productTitle);
            holder.txtExtra = (TextView)convertView.findViewById(android.R.id.text2);
            holder.imgScreenshot = (ImageView)convertView.findViewById(R.id.Screenshot);
            holder.imgFlag = (ImageView)convertView.findViewById(R.id.Flag);

            //holder.mLoginButton = (LoginButton) convertView.findViewById(R.id.login);
            holder.mPostButton = (ImageView) convertView.findViewById(R.id.postButton);

            //sauvegarde du holder
            convertView.setTag(holder);
        } else {
            holder = (MyTag)convertView.getTag();
        }


        //Facebook post button management
        holder.mPostButton.setOnClickListener((OnClickListener) new OnPostClickListener(convertView.getContext(),mFacebook, Long.toString(data[position].videoId), data[position].title, data[position].publisher, data[position].imageUrl));

        holder.mPostButton.setImageResource(com.cedemo.scan.utils.getPostButtonResId());


        //data update
        if(data[position].title != null)
            holder.txtData.setText(data[position].title);
        if(data[position].publisher != null)
            holder.txtExtra.setText(data[position].publisher);



        //get and set the language flag
        if(data[position].language != null)
            holder.imgFlag.setImageResource(com.cedemo.scan.utils.getFlag(data[position].language));

        //set the screenshot
        if(data[position].myVideoScreenshotBm != null)
            holder.imgScreenshot.setImageBitmap(data[position].myVideoScreenshotBm);


                    /* =================================================================

                       THIS FUNCTION IS NOT CALLED WHEN I CLICK ON THE TRACKBALL
                       BUT IS CALLED WHEN I TOUCH THE SCREEN.
                       WHEN I USE THE TRACKBALL THE SELECTED ROW IS FLASHING ONCE.

                       ================================================================= */
        //set the click mechanic if there is a valid video url
        if(data[position].url != null) {
            convertView.setOnClickListener((OnClickListener) new OnProductClickListener(position));


        }

        return convertView;
    }

1 Ответ

2 голосов
/ 20 сентября 2010

Может быть, вы хотите использовать рекомендованный метод setOnItemClickListener() вместо ListView - я думаю, это плохой стиль - устанавливать слушателей непосредственно внутри адаптера.

...