Java 如何防止在Android Oreo中的dobleTap上启动duplicit活动
我知道有很多相同的问题,但我没有找到Android Oreo(8.0,API 26)的解决方案 我的问题是什么: 当我在发送意图开始活动ForResult的按钮上点击更多次时,活动开始的次数会更多 奇怪的事情:Java 如何防止在Android Oreo中的dobleTap上启动duplicit活动,java,android,android-activity,startactivityforresult,android-8.0-oreo,Java,Android,Android Activity,Startactivityforresult,Android 8.0 Oreo,我知道有很多相同的问题,但我没有找到Android Oreo(8.0,API 26)的解决方案 我的问题是什么: 当我在发送意图开始活动ForResult的按钮上点击更多次时,活动开始的次数会更多 奇怪的事情: 经典的“startActivity(intent)”不做此“问题”=活动只启动一次 这只发生在使用Android Oreo的设备/模拟器上(旧版本可以正常工作) 示例代码: 清单: Java代码示例: public类MainActivity扩展了AppCompatActivity{
Java代码示例:
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((按钮)findViewById(R.id.startButton)).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent Intent=新的Intent(getApplicationContext(),SecondActivity.class);
//双击可多次启动活动
startActivityForResult(意向,0);
//工作很好,但我想要结果
星触觉(意向);
}
});
}
}
尝试禁用视图,然后在活动启动后启用
@Override
public void onClick(View view) {
view.setEnabled(false);
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
// starts Activity more times on double tap
startActivityForResult(intent, 0);
//enable button
view.setEnabled(true);
//OR enable button after half second etc
new Handler().postDelayed(new Runnable() {
view.setEnabled(true);
}, 500);
}
此外,您还可以保持禁用状态,直到您从其他活动中恢复。MainActivity的onActivityResult中的启用按钮
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//enable button here
}
单击按钮后,您可以禁用该按钮,如下所示
Button.setEnabled(false);
您可以按如下所示重写代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((Button) findViewById(R.id.startButton)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((Button) findViewById(R.id.startButton)).setEnabled(false);
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
// starts Activity more times on double tap
startActivityForResult(intent, 0);
//works fine BUT I WANT RESULT
startActivity(intent);
}
});
}
}
您可以使用此按钮禁用该按钮几毫秒
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((Button) findViewById(R.id.startButton)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.setEnabled(false);
view.postDelayed(() -> view.setEnabled(true),200);
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
// starts Activity more times on double tap
startActivityForResult(intent, 0);
//works fine BUT I WANT RESULT
startActivity(intent);
}
});
}
}
Thx延迟启用有帮助。你知道为什么在新的安卓系统中需要这样做吗?:)是的,请阅读上的可访问性部分,可能是一个虚拟问题…:D为什么它可以与startActivity(intent)配合使用;:D好的问题,可能是他们已经改变了startActivityForResult的实现。结果:D