[英]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.