我想要从应用程序中主要内容视图以外的视图访问视图中的对象。我该怎么做呢?
我正在尝试添加onclicklistener,但每次都失败,因为程序似乎找不到按钮。
02-12 15:26:29.034: E/AndroidRuntime(11788): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.evolutionsystems.kiroco/com.evolutionsystems.kiroco.OverviewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
或者我是以错误的方式来做这件事的?我应该在主视图中包含所有按钮并将它们设置为隐藏,然后在用户与程序交互时动态更改它们吗?
编辑 - 这是抛出错误的代码类型。
final Button receiver = (Button) findViewById(R.id.receiver);
receiver.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
aboutKirocoClicked(v);
}
});
接收器按钮是内容视图的不同视图的一部分,因此程序找不到它并返回null。
答案 0 :(得分:0)
当你调用findViewById(int)时,你要求在你调用的对象的上下文中查看一个视图。
因此,如果这是一个活动,那么该对象必须是来自setContent的xml资源的一部分。
您还可以从其他夸大的布局(菜单,fragement)中找到资源,但您必须在该对象上调用findViewById才能找到该视图。
不要让你的生活变得复杂,但是一旦你对Android更加熟悉,你可能想要查看像Roboguice或Dagger这样的依赖注入框架。
答案 1 :(得分:0)
在您希望按钮出现的“活动”中,添加以下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//In activity_main.xml, you have a button.
setContentView(R.layout.activity_main);
//You get this button with the referencing ID
Button myBtn = (Button) findViewById(R.id.my_btn_id);
//Now, you can set your onClickListner
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Handle your button click
}
});
}