Установите событие щелчка элемента в setOnItemClickListener списка Android

У меня есть три текстовых представления в строке списка с использованием пользовательского адаптера, и при щелчке строки я хочу выполнить событие щелчка выбранного текстового представления.

Ниже приведен пример кода для события click. Здесь при первом щелчке устанавливаются прослушиватели, и только при втором щелчке происходит фактическое событие щелчка, я хочу найти это при первом щелчке. Является ли это возможным?

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view,      int pos, long id) {

                    final Order orderBooking = (Order)adapter.getItemAtPosition(pos);

                    // SKU listener
                    final TextView tvSkuId = (TextView) view.findViewById(orderBooking.getSelectedSkuId());
                    tvSkuId.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            onSkuClickListener(view, orderBooking);
                        }
                    });

                    // SO listener
                    final TextView tvSoId = (TextView) view.findViewById(orderBooking.getSelectedSoId());
                    tvSoId.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            onSoClickListener(view, orderBooking);
                        }
                    });

                    // OR listener
                    final TextView txtOrId = (TextView) view.findViewById(orderBooking.getSelectedOrId());
                    //onOrClickListener(view, orderBooking);
                    txtOrId.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            onOrClickListener(view, orderBooking);
                        }
                    });
            }
        });

person Swarna    schedule 12.05.2011    source источник


Ответы (2)


Почему бы просто не установить эти clickListeners во время инициализации? Вы должны сделать это в своем адаптере, когда вы привязываете свои данные к представлениям. Ваш код неверен, потому что он будет инициализировать ваши представления каждый раз, когда пользователь щелкает строку списка.

person Egor    schedule 12.05.2011
comment
Да, вы правы, я сделал так, потому что я создал свой адаптер в отдельном классе и не смог обновить представления активности, теперь я добавил адаптер в качестве подкласса, и он отлично работает, если я установил прослушиватель в самом адаптере. большое спасибо. - person Swarna; 12.05.2011

Сделайте это в своем адаптере, в методе getview. Установите прослушиватель onclick для каждого текстового представления.

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {

    List<SectionObj> article = (List<SectionObj>) children.get(groupPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.listchildlayout_galleryview, null);
    }       
     Gallery gallery = (Gallery) convertView.findViewById(R.id.customviewgallery);
     gallery.setAdapter(new AddImgAdp(context, article, groupPosition ));
     gallery.setOnItemClickListener(mOnGalleryClick);

    return convertView;
}

private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


    }       
};

Выше приведено представление галереи. Сделайте то же самое, но сделайте это для текстового просмотра

person Hades    schedule 12.05.2011
comment
Привет, вы правы. Если мы напишем clicklistener для текстового просмотра в listView.setOnItemClickListener, первый элемент списка получит clickble после этого текстового просмотра.. если мы напишем в адаптере. - person SBK; 12.05.2011
comment
Я добавил его в метод getView, и теперь он работает нормально, как только я добавил адаптер в качестве подкласса. - person Swarna; 12.05.2011
comment
@Swarna Добавлен адаптер в качестве подкласса к чему? Если вам нужно обновить списки Activity или Fragment, вы можете вызвать notifyDataSetChanged() на базовом адаптере thats notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself. - person Arvis; 10.02.2014