私は、各リストアイテムに1つ以上のクリック可能な画像を含むことができるリストビューを持っています。それらをクリックすると、画像のフルスクリーン版を表示するアクティビティが開始されます。OnClickListenersが一貫して発砲しない
ListItem
の画像ごとに、GetView()
の実装内にを設定します(やや簡略化)。これは完全に機能しました。
ImageView imageView = (ImageView)convertView.findViewById(R.id.image_res);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ActivityLauncher.startPhotoViewerActivity(mContext, item);
}
});
ただし、パフォーマンスを向上させるために、初めてビューを作成した後で、各ビューをメモリに保存することにしました。私はconvertView
の代わりに4-5種類のビューがあり、コードで動的に構築されるため再利用が困難になるため、これを行います。
メモリにビューを格納してから、後でその位置に基づいてgetView()
を呼び出すときに、既に構築されたビューを返すと、パフォーマンスは大幅に向上しますが、OnClickListeners
はファンキーな動作を開始します。
具体的には、特定の画像をタップすると、その画像のOnClickListener
が直ちに起動するか、まったく起動しない可能性があります。直ちに発射しない場合、スクロールを開始すると直ちに発射することがあります。これによりOnClickListener
が実行されない場合は、戻るをクリックするとアクティビティが終了します。これがトリガーされない場合は、BACKを押してすべてのアクティビティを終了してからアプリを再入力すると、キューに入れられたすべてのものがトリガーされますOnClickListeners
。あるケースでは、結果を出さずにさまざまな画像で25回クリックしました。それから、すべてのアクティビティを閉じてから、もう一度アプリケーションアイコンをクリックすると、25個の画像プレビューがすべて開きました。
この原因は何ですか?私にとって興味深いのは、OnClickListeners
が、ある時点で写真ビューアのアクティビティを開くため、明らかに正しく設定されていることです。間違ったイメージは決して開かれず、絶対に発砲しない場合はありません。問題は、すぐに、または後で発射する可能性があることです。
各リスト項目のビューを保存して、私が行っているようにgetView()
内の位置に基づいてそれらを戻すことはお勧めしませんか?どんな助けでも大歓迎です。
'getView()'メソッド全体を投稿する必要があります。そうしないと、この特定の動作がなぜ発生しているのかを診断することは非常に難しくなります。 – dmon