java - 尝试使用泛型延迟加载 android View

标签 java android generics

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

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

    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,但如果我记得基础知识,在传递引用时应该不会发生这种情况。

最佳答案

你从来没有给 btnDeleteAlarm 赋值。 在 java 中,方法总是复制它们的参数,因此 loadView 获取引用 btnDeleteAlarm 的副本并可能更改副本,但它不会更改 btnDeleteAlarm。 您可以让您的 loadView 方法返回“ View ”并在 onCreate 方法中将其分配给 btnDeleteAlarm。

关于java - 尝试使用泛型延迟加载 android View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706178/

相关文章:

java - 如何在 ViewPager Fragment 中更改 View

generics - 在 Rust 中实现 len() 函数的类型的通用较长函数

JFrame 不同类中的 Java JTable

android - 我不完全了解应用索引

android - 三星 Android 设备上的 GPS 问题?

java - 抽象基类的通用数据类型返回

java - 一般错误 : type . .. 不适用于参数

java - 在大型未排序列表中查找 n 个最大值,一次仅处理一页值

java - Java 中的 native 库位置

java - 异常之间的管道 Java 7 功能