我有一個listview,其中每個列表項可以包含1個或多個可點擊的圖像。點擊它們會啓動一個顯示圖像全屏版本的活動。OnClickListeners不一致觸發
對於每個ListItem
中的每個圖像,以下代碼(稍微簡化)將在我的GetView()
實現中設置OnClickListeners
。這工作完美。
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()
進行後續調用期間返回已構建的視圖,則性能顯着提高,但開始表現得很時髦。
具體來說,現在當一個給定的圖像被點擊時,它的OnClickListener
可能會立即啓動或根本不啓動。在不立即觸發的情況下,只要開始滾動,就會觸發。如果這不會觸發OnClickListener
運行,則返回(退出活動)可能會觸發它。如果這沒有觸發它,然後按BACK鍵關閉所有活動),然後重新進入應用程序將觸發所有排隊的OnClickListeners
。在一個案例中,我在各種圖像上單擊了25次而沒有任何結果。然後我關閉了所有活動,然後再次單擊應用程序圖標,打開所有25個圖像預覽。
任何想法是什麼造成這種情況?我感興趣的是,OnClickListeners
顯然設置正確,因爲他們在某個時間點打開照片查看器活動。從來沒有打開錯誤的圖像,永遠不會有火災發生的情況。問題是他們可能會立即或稍後開火。
是不是建議保存每個列表項的視圖並根據getView()
內的位置返回它們,就像我正在做的那樣?任何幫助是極大的讚賞。
您應該發佈整個'getView()'方法,否則將很難診斷爲什麼會發生這種特定行爲。 – dmon