Java 如何防止在Android Oreo中的dobleTap上启动duplicit活动

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{

我知道有很多相同的问题,但我没有找到Android Oreo(8.0,API 26)的解决方案

我的问题是什么:

当我在发送意图开始活动ForResult的按钮上点击更多次时,活动开始的次数会更多

奇怪的事情:

  • 经典的“startActivity(intent)”不做此“问题”=活动只启动一次

  • 这只发生在使用Android Oreo的设备/模拟器上(旧版本可以正常工作)

  • 示例代码:

    清单:

    
    
    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