【发布时间】:2011-01-31 04:39:30
【问题描述】:
为什么
TextView test = (TextView) findViewById(R.id.testTextView);
test.getText();
产生空指针异常? id 正确,在我的 XML 布局文件中正确声明了 testTextView。
【问题讨论】:
为什么
TextView test = (TextView) findViewById(R.id.testTextView);
test.getText();
产生空指针异常? id 正确,在我的 XML 布局文件中正确声明了 testTextView。
【问题讨论】:
如果您传递有效的 id,findViewById 返回 null 的唯一原因是您设置了错误的内容视图(使用 setContentView)或根本没有设置内容视图。
【讨论】:
onCreate 中打电话给setContentView。
我认为您可能在定义 TextView 后编写了 setContentView(..)。把这些反过来,它应该可以工作。
变化:
TextView test = (TextView) findViewById(R.id.testTextView);
.
.
setContetView(..)
收件人:
setContetView(..)
.
.
TextView test = (TextView) findViewById(R.id.testTextView);
【讨论】:
你可能没有打电话给setContentView。您只能使用findViewById 来获取已经膨胀的视图元素。
您也可以使用 layoutinflater 来为视图充气,但这可能不是您想要的。
【讨论】:
onCreate 中打电话给setContentView。
您确定 TextView 设置在正确的 XML 上吗?
例如,如果您正在创建一个加载自定义 XML 的对话框,要从该 xml 中获取元素,您必须在 dialog.findViewById(R.id.testTextView); 中提及它
就像 Falmarri 所说,视图必须被夸大。 我知道您通过创建一个新项目解决了这个问题,但仍然想为未来的用户提及它。
【讨论】:
也可能是您在两个文件中定义了活动。例如 layout 和 layout-v21 以及其中一个缺少像 id 这样的信息。所以检查所有活动的布局
【讨论】:
在我的例子中,布局还没有完成膨胀。通过在尝试访问 TextView 之前添加一个小延迟来解决。
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
TextView test = (TextView) findViewById(R.id.testTextView);
test.getText();
}
}, 100);
【讨论】:
我为此苦苦挣扎了一段时间,我意识到,如果您有多个布局文件版本,例如:
“layout”文件夹中的“activity_one.xml”和“layout - small”文件夹中的一个
我用于多个电话布局支持,问题是其中一个 TextViews 在两者中,具有完全相同的 ID 和所有内容,但不同之处在于布局中视图层次结构中的一个更高。
当我将它们更改为在同一个位置时,它起作用了。
(我知道这已经回答了,但也许这对那里的人有帮助。不过非常罕见。)
【讨论】: