java试图使用泛型延迟加载安卓视图
我有一个应用程序,在我的一个活动中,我创建了一个基本活动,其中包含一些派生类可以使用的助手方法
我有一个惰性加载视图的方法,下面是代码
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了,但是如果我记住了基本知识,那么在传递引用时就不会发生这种情况
# 1 楼答案
你从来没有给btnDeleteAlarm分配过什么。 在java中,方法总是复制它们的参数,因此loadView会获取引用btnDeleteAlarm的副本,并且可能会更改副本,但它不会更改btnDeleteAlarm。 您可以让loadView方法返回“视图”,并在onCreate方法中将其分配给btnDeleteAlarm