San*_*lez 2 android button listener
我有一个我正在为Android手机制作的应用程序的问题.我有一个有两个按钮的Activity.关键是如果我足够快地按下两个按钮(这不是一个好的用户行为),那两个按钮会触发,而我只想触发(最多)只有其中一个按钮.这是一个代码片段来举例说明我的意思:
public class ActivityLevels extends Activity {
private boolean launched;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Set the content view of the screen
setContentView(R.layout.levels);
//Set lauched flag to false
launched = false;
//Initialize buttons
Button loadLevel01 = (Button) findViewById(R.id.ButtonLoadLevel01);
Button loadLevel02 = (Button) findViewById(R.id.ButtonLoadLevel02);
//Set Button Listeners
loadLevel01.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
launchGame(0);
}
});
loadLevel02.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
launchGame(1);
}
});
}
private void launchGame(int level) {
//Just launch the activity if !lanched
if(!launched) {
launched = true;
//Start Activity
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在网上查了一个星期左右,并没有找到任何方法来阻止这种情况.据我所知,看起来有人已经在这里发布了类似的问题:问题20073:即使在监听器中立即禁用按钮,按钮onClick监听器也可以被触发两次
顺便说一句,我也尝试在"launchGame(int)"调用之前立即禁用该按钮,但没有实现任何目标.这段代码只是整个活动的一个改编片段.我认为可以理解我的意思,但如果您需要任何其他描述,请告诉我.
在此先感谢,并对任何拼写错误感到抱歉,我的英语不是很好.
我实际上解决了我的问题.关键是要使我的方法launchGame(int level)同步,因此在完成之前不能多次访问它.通过这种方式,让我们说我们有从点击听众两个线程,因为我按下按钮一个按钮和两个非常非常快:与一个synchronized方法,它会被称为lauchGame(1),完成动作,然后launchGame(2)用boolean launched设置好的来标记true.
这就是我所做的:
private void synchronized launchGame(int level) {
//Just launch the activity if !lanched
if(!launched) {
launched = true;
//Start Activity
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何,非常感谢您的所有答案!
| 归档时间: |
|
| 查看次数: |
5464 次 |
| 最近记录: |