web-dev-qa-db-ja.com

リストビューのsetOnItemClickListenerでアイテムクリックイベントを設定Android

カスタムアダプタを使用してリストビューの行に3つのテキストビューがあり、行をクリックすると、選択したテキストビューのクリックイベントを実行したいと思います。

以下は、クリックイベントのサンプルコードです。ここでは、最初のクリックでリスナーが設定され、2回目のクリックでのみ実際のクリックイベントが発生します。これは、最初のクリック自体で見つけたいと思います。出来ますか?

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);
                        }
                    });
            }
        });
8
Swarna

初期化時にこれらのclickListenersを設定しないのはなぜですか?データをビューにバインドするときは、アダプタで作成する必要があります。コードが間違っているため、ユーザーがリストの行をクリックするたびにビューが初期化されます。

6
Egor

Getviewメソッドで、アダプターでそれを行います。すべてのテキストビューにonclicklistnerを設定します。

@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) {


    }       
};

上記はギャラリービューです。テキストビューに対して行う以外は同じことを行います

0
Hades