自定義 GridView 時報 NullPointerException,原因極其隱蔽:gridView.findViewById(R.id.gridView) 未將返回值賦給成員變量。本文還原現場並給出修正方案。
public class AtyUsingGridView extends Activity {
private GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aty_using_gridview);
ImageGridViewAdapter adapter = new ImageGridViewAdapter(this);
gridView.findViewById(R.id.gridView); // ❌ 返回值未賦值
gridView.setAdapter(adapter); // ❌ gridView 仍為 null
}
}
Unable to start activity
java.lang.NullPointerException
at AtyUsingGridView.onCreate(...)
gridView = findViewById(R.id.gridView); // ✅ 正確寫法
// 或
gridView = (GridView) findViewById(R.id.gridView);
gridView.setAdapter(adapter);
findViewById 返回 View 實例,不會自動賦值給同名字段。gridView.findViewById(...) 時,gridView 為 null,拋出 NPE(但此處因未賦值,實際調用的是 Activity.findViewById,返回 View 卻未保存,導致後續 gridView.setAdapter 空指針)。gridView = findViewById(R.id.gridView);