[英]Android - How to make buttons listen more than one time
我有一个带有主屏幕和一堆buttons
的应用程序,因此每个listeners
器都有。 用户单击其中一个buttons
,将显示一个新的layout
,并且该layout
具有带有listener
的back button
。
问题在于,每当用户按下“ back button
,都会back button
主屏幕layout
,但是没有任何listeners
可以使用该buttons
。
这是一些示例代码:
@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
}
});
}
});
}
您不应该使用setContentView()
更改屏幕。 在Android中,通过使用startActivity(new Intent(...))
或使用Malimo推荐的片段开始新的活动来更改屏幕(这样做有点困难,但效果更好)。 您调用两次setContentView()
,其中一个销毁另一个。
我认为您应该对contentview使用片段。 因此每个片段都将对其contentview负责,并且每次显示时都可以添加侦听器... http://developer.android.com/guide/components/fragments.html
我确定Android内置了一种method
,您可以执行此操作,但是我的第一个想法是recursion
。
问题在于您的侦听器位于onCreate
方法中,这意味着在运行它们之后,它们将不再重复。 在“ back button listener
,当您将content view
再次设置为主屏幕时,将不会再次设置listeners
,只会更改 content view
。
要解决此问题,一旦单击“ back button
,您将不得不再次调用onCreate
方法,因为这样它将再次在主屏幕上与所有listeners
一起运行您的整个代码。
我建议将所有listeners
放在一个listeners()
方法中,然后在需要时recursively
调用该方法。 需要在onCreate(...)
以及单击back button
时调用它:
@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
}
});
}
});
}
我还建议将back button listener
置于其自己的method
,以便每次更改layout
时都可以调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.