tej*_*jas 82 android onclick button android-activity
如果我在第一次点击后立即按两次按钮,我试图阻止活动加载两次.
我有一个活动,点击按钮加载,比方说
myButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//Load another activity
}
});
Run Code Online (Sandbox Code Playgroud)
现在因为要加载的活动具有网络调用,所以加载(MVC)需要一些时间.我确实显示了加载视图,但如果我在此之前按下按钮两次,我可以看到活动被加载两次.
有谁知道如何防止这种情况?
Awa*_*riq 138
将其添加到您的Activity定义中AndroidManifest.xml......
android:launchMode = "singleTop"
Run Code Online (Sandbox Code Playgroud)
wan*_*nik 55
在按钮的事件侦听器中,禁用该按钮并显示另一个活动.
Button b = (Button) view;
b.setEnabled(false);
Intent i = new Intent(this, AnotherActitivty.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
覆盖onResume()以重新启用按钮.
@Override
protected void onResume() {
super.onResume();
Button button1 = (Button) findViewById(R.id.button1);
button1.setEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
Car*_*doL 35
你可以像这样使用意图标志.
Intent intent = new Intent(Class.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
它只会使一个活动在历史堆栈的顶部打开.
And*_*oid 21
由于SO不允许我评论其他答案,我不得不用新答案污染这个帖子.
"活动打开两次"问题的常见答案以及我对这些解决方案的体验(Android 7.1.1):
编辑:这是用startActivity()开始活动.使用startActivityForResult()时,我需要设置FLAG_ACTIVITY_SINGLE_TOP和FLAG_ACTIVITY_CLEAR_TOP.
假设@wannik是正确的,但如果我们有多个按钮调用同一个动作监听器,我在开始下一个活动之前几乎同时点击两个按钮...
所以如果你有领域private boolean mIsClicked = false;和听众是好的:
if(!mIsClicked)
{
mIsClicked = true;
Intent i = new Intent(this, AnotherActitivty.class);
startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
而onResume()我们需要返回的状态:
@Override
protected void onResume() {
super.onResume();
mIsClicked = false;
}
Run Code Online (Sandbox Code Playgroud)
我和@wannik的答案之间的差异是什么?
如果在其调用视图的侦听器中将enabled设置为false,则仍将启用使用相同侦听器的其他按钮.所以为了确保侦听器的动作没有被调用两次,你需要有一些全局禁用侦听器的所有调用(如果它是新实例或没有,则永远不要)
我和其他人的答案有什么区别?
他们正在以正确的方式思考,但他们并没有考虑将来返回到调用活动的同一个实例:)
小智 5
使用singleInstance避免活动调用两次。
<activity
android:name=".MainActivity"
android:label="@string/activity"
android:launchMode = "singleInstance" />
Run Code Online (Sandbox Code Playgroud)
它只对我有用 startActivity(intent)
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63607 次 |
| 最近记录: |