自定義 ViewHolder 繼承 Activity,並在其中直接 startActivity,導致上下文錯誤、內存洩漏。
ViewHolder 為靜態內部類,不繼承任何類,僅持有子 View 引用。Context context 并保存为成员变量。getView 中为 Item 根布局或子控件設置點擊監聽:convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("id", data.get(position).getId());
context.startActivity(intent); // Context 必須是 Activity 或包裝過的 ContextWrapper
}
});
context 應來自 Activity 或 new ContextThemeWrapper(activity, theme),不可使用 Application Context(無法啟動標準 Activity)。getActivity()。