我有一个应用程序,在我的一个活动中,我创建了一个基本活动,其中包含派生类可以使用的一些辅助方法。
我有一个延迟加载视图的方法,这里是代码
protected <T extends View> void loadView(T view, int id) {
if(view == null){
view = (T)findViewById(id);
}
在我的派生类中,我称之为。
private Button btnAddAlarm
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timer_list);
loadView(btnDeleteAlarm, R.id.btnDeleteAlarm); //the view in the helper method loaded fine
btnDeleteAlarm.setEnabled(false); //Null pointer exception!
问题是btnDeleteAlarm在退出函数后为null,即使传入了引用。
我有一段时间没有触及java,但如果我记得基础知识,那么在传递引用时就不会发生这种情况。
答案 0 :(得分:2)
您从未向btnDeleteAlarm分配内容。 在java中,方法总是复制它们的参数,因此loadView获取引用btnDeleteAlarm的副本并可能更改副本,但它不会更改btnDeleteAlarm。 你可以让你的loadView方法返回“视图”并将它在onCreate方法中分配给btnDeleteAlarm。