Java 安卓-如何让按钮多听一次
我有一个应用程序,它有一个主屏幕和一堆Java 安卓-如何让按钮多听一次,java,android,button,listeners,Java,Android,Button,Listeners,我有一个应用程序,它有一个主屏幕和一堆按钮,因此每个按钮都有监听器。用户单击其中一个按钮后,会出现一个新的布局,该布局有一个带有侦听器的后退按钮 问题是,每当用户按下后退按钮时,主屏幕布局会被调回,但是侦听器不再为按钮工作 以下是一些示例代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.la
按钮,因此每个按钮都有监听器。用户单击其中一个按钮后,会出现一个新的布局
,该布局
有一个带有侦听器的后退按钮
问题是,每当用户按下后退按钮时,主屏幕布局
会被调回,但是侦听器
不再为按钮
工作
以下是一些示例代码:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // return to home screen
// sets up a listener for when the GCF main screen button is clicked.
GCFButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
setContentView(R.layout.gcf); // change to the gcf layout
Button back = (Button)findViewById(R.id.btnBack); // set up the back button in the gcf layout
back.setOnClickListener(new View.OnClickListener() // put a listener on back button
{
public void onClick(View v)
{
setContentView(R.layout.main); // return to home screen
}
});
Button GCFCalculate = (Button)findViewById(R.id.btnCalculate); // set up the gcf button in the gcf layout
GCFCalculate.setOnClickListener (new View.OnClickListener() // put listener on gcf button in gcf layout
{
public void onClick(View v)
{
// do stuff
}
});
}
});
}
我确信Android中内置了一个方法
,可以让你做到这一点,但我的第一个想法是递归
问题是您的侦听器处于onCreate
方法中,这意味着在运行完它们之后,它们不会重复。在后退按钮侦听器中
,
当您再次将内容视图
设置为主屏幕时,不会再次设置侦听器
,只会更改内容视图
要解决这个问题,您必须在单击back按钮
后再次调用onCreate
方法,因为这样它将使用所有侦听器运行整个代码
再次从主屏幕
我建议将所有侦听器
放在listeners()
方法中,然后在需要时递归调用该方法。需要在onCreate(…)
中调用它,
以及单击后退按钮时:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
listeners(); // set up all the listeners for the buttons
}
public void listeners()
{
setContentView(R.layout.main); // return to home screen
// sets up a listener for when the GCF main screen button is clicked.
GCFButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
setContentView(R.layout.gcf); // change to the gcf layout
Button back = (Button)findViewById(R.id.btnBack); // set up the back button in the gcf layout
back.setOnClickListener(new View.OnClickListener() // put a listener on back button
{
public void onClick(View v)
{
listeners(); // recursively call the listeners again to 'start over'
}
});
Button GCFCalculate = (Button)findViewById(R.id.btnCalculate); // set up the gcf button in the gcf layout
GCFCalculate.setOnClickListener (new View.OnClickListener() // put listener on gcf button in gcf layout
{
public void onClick(View v)
{
// do stuff
}
});
}
});
}
我还建议将后退按钮侦听器
放在它自己的方法中
,这样每次更改布局
时都可以调用它。在我看来,您应该为ContentView使用片段。因此,每个片段都将负责其contentview,并且可以在每次显示时添加侦听器。。。
您不应使用setContentView()
更改屏幕。在安卓系统中,通过使用startActivity(newintent(…)
或Malimo推荐的片段启动一个新活动(这有点困难,但更好)来改变屏幕。调用两次setContentView()
,其中一个正在销毁另一个