这是一个新手问题,但为什么我不能在onCreate方法之外的按钮上调用setOnClickListener方法?
例如为什么我不能这样做?或者Eclipse可能没有onCreate方法之外的setOnClickListener代码提示?因为什么都没有出现。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
答案 0 :(得分:4)
您可以在任何功能中使用setonclicklistener。但这不是你的确切问题。 实际问题是
setContentView(R.layout.main_layout);
您可以在 setContentView 之后调用 findViewById 功能。 setContentView 用于设置活动的布局。您的布局包含不同的视图,如按钮等。因此,如果您不设置布局,则无法使用findViewById访问您的视图,如果您无法访问,则无法使用它们。
正确的顺序是:
1 Set layout on your activity using setContentView.
2 Find id for your view using findViewById.
3 Then use your views for your purposes.
首先要专注于基础知识。
另一个问题是你在任何函数之外调用setOnClickListener。在任何函数静态块之外,仅允许函数声明和赋值。下面的陈述既不是他们。所以它永远不会执行,回调永远不会发生。
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
答案 1 :(得分:1)
onCreate 是普通Java中的 main(String [] args)函数。这是您设置代码的地方。另请参阅此链接: -
Noob question about "Hello World" Android tutorial
这是正确的方法: -
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
}
或
这是实现任务的另一种方式: -
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(onClick);
}
public OnClickListener onClick= new OnClickListener() {
@Override
public void onClick(View v) {
// Do something in response to button click
}
};
答案 2 :(得分:0)
只有在调用setContentView(R.layout.main_layout);
之后,您才能访问该视图中的组件(即按钮)。
由于按钮的声明和即时创建在主类上下文中,因此发生在<{strong> setContentView
之前。
在onCreate中插入按钮代码部分,它将起作用。
答案 3 :(得分:0)
实施例
public class yourActivityName extends Activity implements OnClickListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.button_send) {
//your code..
}
}
}
答案 4 :(得分:0)
我认为这是因为您希望在代码执行后立即添加侦听器。如果你把它放在外面,这在技术上是非常可能的,你的代码将不会被执行(当然除非你打算从onCreate方法中调用该方法。
答案 5 :(得分:0)
为每个按钮注册onClickListener,如。
button.setOnClickListener(this);
并覆盖此方法
@Override
public void onClick ( View v )
{
if ( v == button )
{
// your code...
}
//// add others...
}
在您的活动中实施OnClickListener
public class yourActivity extends Activity implements OnClickListener
答案 6 :(得分:0)
在{} of:
中编写代码可以修复此问题public void onCreate(Bundle savedInstanceState)
下方:
setContentView(R.layout.main_layout);