fList.setAdapter(la) 拋出 NullPointerException,但 Log 確認資料陣列已正確填入。
自訂 ArrayAdapter 建構子呼叫順序錯誤:
// 錯誤:第三參數傳入 R.id.Author_list (TextView resource ID)
ListAdapter1 la = new ListAdapter1(this, R.id.Author_list, aList);
ArrayAdapter(Context, int resource, List<T>) 的第二參數應為 項目版面資源 ID (如 android.R.layout.simple_list_item_1),而非容器 ListView 的 ID。
public class Forfattere extends Activity {
ListView fList;
ListAdapter1 la;
ArrayList<String> aList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.forfattere);
fList = (ListView) findViewById(R.id.Author_list);
// 填入資料...
for (String s : DBlistbookfestival.getAuthorName()) {
aList.add(s);
}
// 正確:使用系統內建單行文字版面
la = new ListAdapter1(this, android.R.layout.simple_list_item_1, aList);
fList.setAdapter(la);
}
private class ListAdapter1 extends ArrayAdapter<String> {
public ListAdapter1(Context context, int resource, List<String> list) {
super(context, resource, list);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 建議使用 ViewHolder 模式優化效能
return super.getView(position, convertView, parent);
}
}
}
R.layout.custom_row) 並傳入建構子ViewHolder 避免重複 findViewByIdRecyclerView + Adapter 取代 ListView,支援更彈性的佈局與動畫