试图使用泛型延迟加载android视图

时间:2011-01-16 15:28:17

标签: java android generics

我有一个应用程序,在我的一个活动中,我创建了一个基本活动,其中包含派生类可以使用的一些辅助方法。

我有一个延迟加载视图的方法,这里是代码

    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 个答案:

答案 0 :(得分:2)

您从未向btnDeleteAlarm分配内容。 在java中,方法总是复制它们的参数,因此loadView获取引用btnDeleteAlarm的副本并可能更改副本,但它不会更改btnDeleteAlarm。 你可以让你的loadView方法返回“视图”并将它在onCreate方法中分配给btnDeleteAlarm。