原始碼中 MainActivity 繼承 ListActivity 並實作 OnItemClickListener,但在 onCreate 中**未呼叫** list.setOnItemClickListener(this),導致點擊無反應。且同時存在自訂 ListView(findViewById(R.id.list))與 ListActivity 內建 ListView,造成雙重綁定混淆。
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView listView;
private CoverLetterAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.coverletterselection);
listView = findViewById(R.id.list);
adapter = new CoverLetterAdapter(this, coverLetterTitles);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this); // 關鍵:綁定監聽器
}
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
String item = (String) parent.getItemAtPosition(position);
Log.d("Click", "position=" + position + ", item=" + item);
// 業務邏輯...
}
}
ArrayAdapter 或 RecyclerView 替代自訂 BaseAdapter,減少樣板代碼。ViewHolder 模式正確,但 convertView 重用邏輯中 setTag/getTag 順序應調整:先 findViewById 再 setTag,避免重複查找。setOnItemClickListener?android:focusable="true" 子元素搶奪焦點?onCreate 而非 onResume 綁定?