我有一个主屏幕和一堆buttons
的应用,因此每个listeners
。用户点击其中一个buttons
后,系统会显示一个新的layout
,而layout
的{{1}}会带有back button
。
问题在于,每当用户按下listener
时,主屏幕back button
都会重新启动,但layout
的任何一个都不再适用于listeners
。
以下是一些示例代码:
buttons
答案 0 :(得分:2)
您不应使用setContentView()
更改屏幕。在Android中更改屏幕,方法是使用startActivity(new Intent(...))
启动一个新活动,或者使用像Malimo推荐的碎片(这样做有点困难但更好)。你打电话两次setContentView()
,其中一人正在摧毁另一人。
答案 1 :(得分:1)
在我看来,你应该使用片段作为你的内容视图。因此每个片段都将负责其内容视图,并且每次显示时都可以添加监听器... http://developer.android.com/guide/components/fragments.html
答案 2 :(得分:0)
我确信Android中内置method
允许您执行此操作,但我首先想到的是recursion
。
问题是你的听众使用的是onCreate
方法,这意味着在他们运行之后,他们不会重复。在back button listener
中,
当您再次将content view
设置为主屏幕时,不会再次设置listeners
,只会更改 content view
。
要解决此问题,您必须在点击onCreate
后再次调用back button
方法,因为这样会运行您的所有代码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
更改时都可以调用它。