カスタムアダプタを使用してリストビューの行に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);
}
});
}
});
初期化時にこれらのclickListenersを設定しないのはなぜですか?データをビューにバインドするときは、アダプタで作成する必要があります。コードが間違っているため、ユーザーがリストの行をクリックするたびにビューが初期化されます。
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) {
}
};
上記はギャラリービューです。テキストビューに対して行う以外は同じことを行います