1

多くの同じ質問がありますが、Android Oreo(8.0、API 26)の解決策は見つかりませんでした。Android OreoのdobleTapで不正行為を開始しないようにする方法

私の問題は何である:私はactivityForResultを開始する意図を送信ボタンを複数回タップすると

、活動はMORE回を開始します!

奇妙なこと:実行しないこの "問題" は活動は一度だけ

  • を開始=

    1. クラシック 'startActivity(意思)' それはで唯一のデバイス/エミュレータ上で起こりますAndroidのオレオ(古いバージョンでは正常に動作します)

    例コード:

    マニフェスト:

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="sandbox.jarda.cz.activityresulttest"> 
    
        <application 
         android:allowBackup="true" 
         android:icon="@mipmap/ic_launcher" 
         android:label="@string/app_name" 
         android:roundIcon="@mipmap/ic_launcher_round" 
         android:supportsRtl="true" 
         android:theme="@style/AppTheme"> 
    
         <activity android:name=".MainActivity"> 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
    
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         </activity> 
    
         <activity 
          android:name=".SecondActivity" 
          android:launchMode="singleTop" /> 
    
        </application> 
    
    </manifest> 
    

    Javaコードの例:

    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) { 
           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); 
          } 
         }); 
        } 
    } 
    
  • 答えて

    1

    ビューを無効にしてみてください、その後の活動が開始されると有効

    また
    @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 
    } 
    
    +0

    Thx遅延有効化ヘルプ。なぜ新しいAndroidでそれが必要なのか分かりませんか? :) – Jarda

    +0

    はい、アクセシビリティのセクションhttps://developer.android.com/about/versions/oreo/android-8.0-changes.html – Pehlaj

    +0

    とおそらくダミー質問...を読んでください:D なぜそれは正常に動作していたstartActivity(インテント); :D – Jarda

    1

    ボタンをクリックすると、以下のように無効にすることができます。

    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); 
          } 
         }); 
        } 
    } 
    
    1

    以下のようにして、コードを書き換えることができます。

    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); 
         } 
        }); 
    } 
    } 
    
    関連する問題