событие android onClick не запускается

1

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

В функции getview im используется 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;
    }
Теги:
onclick
click

1 ответ

2
Лучший ответ

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

  • 0
    Спасибо большое. Не знаю, почему не пробовал это решение раньше. Я думаю, потому что я думал, что это одно и то же. Поэтому я проверил его и не понимаю почему, но его работа лучше. На этот раз трекбол запускает событие. Мне действительно интересно, почему есть разница ... Если вам разрешено настраивать событие click в конвертируемом представлении ... почему оно будет работать иначе, чем настраивать его в самом просмотре списка ?? Так или иначе. БЛАГОДАРЮ ВАС.
  • 0
    Я думаю, у вас были некоторые проблемы из-за того, что события трекбола не доходили до правильной точки зрения. Ваши представления адаптера являются дочерними для ListView, поэтому ListView может перехватывать некоторые события. Поэтому они не перенаправляются на дочерние представления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню