Java 我应该在哪里声明不同布局的按钮?
我已经制作了一个计算器应用程序,我正在尝试创建一个关于页面来显示一些信息。 OK按钮将被编码为setContentView(originallayout.xml)以返回计算器布局 我应该把这些代码放在哪里来声明OK按钮Java 我应该在哪里声明不同布局的按钮?,java,android,button,layout,Java,Android,Button,Layout,我已经制作了一个计算器应用程序,我正在尝试创建一个关于页面来显示一些信息。 OK按钮将被编码为setContentView(originallayout.xml)以返回计算器布局 我应该把这些代码放在哪里来声明OK按钮 专用按钮btnOK btnOK=(按钮)findviewbyd(R.id.btnOK) btnok.setOnClickListener(OKListener) 我试着把这些代码放在主布局按钮的下方,但应用程序在启动后就停止了 07-18 09:39:43.290:E/Andro
专用按钮btnOK代码>
btnOK=(按钮)findviewbyd(R.id.btnOK)代码>
btnok.setOnClickListener(OKListener)代码>
我试着把这些代码放在主布局按钮的下方,但应用程序在启动后就停止了
07-18 09:39:43.290:E/AndroidRuntime(6984):java.lang.RuntimeException:无法启动活动组件信息{com.hychentsa.calculator/com.hychentsa.calculator.CalculatorActivity}:java.lang.NullPointerException
如果您的版面没有包含按钮的id(在您的例子中是btnOK
),Eclipse将抛出NullPointerException-它无法在版面的内容中找到它。
因此,当您设置布局(或菜单)时,它必须包含id btnOK。检查一下
在设置内容视图(R.layout.your\u about\u layout\u name)之后放置按钮初始化代码>
把这些代码放进去
Button btnOK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
btnOK = (Button)findViewById(R.id.btnOK);
btnok.setOnClickListener(OKListener);
}
更新:
看看invertigo的答案:
单击按钮时更改布局是错误的。
你必须这样做:
计算器活动
public class CalculatorActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator_black);
// initialization of your views stays here
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.calculator_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.your_id_to_go_in_about_activity:
Intent intent = new Intent(CalculatorActivity.this, AboutActivity.class);
// put some extras if you need to send information from this page to the
// AboutActivity page with this code: intent.putExtra();
startActivity(intent); // with this code you go to AboutActivity
return true;
case R.id.theme:
// Do Something with the theme
return true;
default:
return super.onOptionsItemSelected(item);
}
}
现在,OKButton的初始化位置在新类中,让我们调用它
关于触觉
您可以在此处输入我以前的代码:
public class AboutActivity extends Activity{
Button btnOK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
btnOK = (Button)findViewById(R.id.btnOK);
btnok.setOnClickListener(OKListener);
}
// and the listener for your OK button have to look like this:
OnClickListener OKListener = new OnClickListener() {
@Override
public void onClick(View v) {
// Do something here if you need
finish(); // with finish() you are returning to the previous page
// which is CalculatorActivity
}
};
}
如果您的版面没有包含按钮的id(在您的例子中是btnOK),Eclipse将抛出NullPointerException-它无法在版面的内容中找到它。
因此,当您设置布局(或菜单)时,它必须包含id btnOK。检查一下
在设置内容视图(R.layout.your\u about\u layout\u name)之后放置按钮初始化代码>
把这些代码放进去
Button btnOK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
btnOK = (Button)findViewById(R.id.btnOK);
btnok.setOnClickListener(OKListener);
}
更新:
看看invertigo的答案:
单击按钮时更改布局是错误的。
你必须这样做:
计算器活动
public class CalculatorActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator_black);
// initialization of your views stays here
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.calculator_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.your_id_to_go_in_about_activity:
Intent intent = new Intent(CalculatorActivity.this, AboutActivity.class);
// put some extras if you need to send information from this page to the
// AboutActivity page with this code: intent.putExtra();
startActivity(intent); // with this code you go to AboutActivity
return true;
case R.id.theme:
// Do Something with the theme
return true;
default:
return super.onOptionsItemSelected(item);
}
}
现在,OKButton的初始化位置在新类中,让我们调用它
关于触觉
您可以在此处输入我以前的代码:
public class AboutActivity extends Activity{
Button btnOK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
btnOK = (Button)findViewById(R.id.btnOK);
btnok.setOnClickListener(OKListener);
}
// and the listener for your OK button have to look like this:
OnClickListener OKListener = new OnClickListener() {
@Override
public void onClick(View v) {
// Do something here if you need
finish(); // with finish() you are returning to the previous page
// which is CalculatorActivity
}
};
}
与使用setContentView()更改屏幕不同,您应该有单独的活动。然后,在about活动中,只需单击按钮调用finish(),即可返回到主活动
您应该有单独的活动,而不是使用setContentView()来更改屏幕。然后,在about活动中,只需单击按钮调用finish(),即可返回到主活动
您正在从不同的视图层次结构初始化按钮?您可以findViewById
将当前视图层次设置为“活动”。是否从其他视图层次初始化按钮?您可以查找设置为活动的当前视图层次结构的findViewById
。很抱歉,它不起作用。。。实际上,当我打开应用程序时,它会将布局设置为R.layout.calculator_black
,当我单击菜单的“about”项后,它会将布局设置为R.layout.about
,此布局包含一个按钮btnOK。我想设置此按钮,使其在单击时将布局设置回R.layout.calculator_black。在我完成更新后,您是否尝试了我的代码?应该行的,抱歉不行。。。实际上,当我打开应用程序时,它会将布局设置为R.layout.calculator_black
,当我单击菜单的“about”项后,它会将布局设置为R.layout.about
,此布局包含一个按钮btnOK。我想设置此按钮,使其在单击时将布局设置回R.layout.calculator_black。在我完成更新后,您是否尝试了我的代码?它应该会起作用。