リストを表示するためにカスタム ListViewAdapter を使用しています。リストの各行には 3 つのボタンがあります。つまり、リスナーが接続されています。しかし、convertView が存在する行であっても、各スクロール中に新しい OnClickListeners が null 以外の値として作成されていることは非常に気がかりです。
// 私が理解しているように、ビューを変換する最も一般的なアプローチ:
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listview_item, parent, false);
} else {
view = convertView;
}
final TextView textView = (TextView) view.findViewById(R.id.txtProduct);
textView.setText(name);
textView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
...
}
});
... two more listeners, with the same approach
return view;
Java での私の経験によると、Spider 感覚の "ting-a-lings" - 同じリスナー アプローチを作成して破棄することは、ガベージ コレクターの悪用のようです。古いリスナーがいつ収集されたのかはわかりません...
新しいリスナーを作成する代わりに、古いリスナーを使用する方法はありますか? (ある種のキャッシュデータ構造)