2016-07-14 41 views
4

有两个按钮,按钮A使用简单的Activity.startActivity()方法在其onClickListener中启动另一个活动,按钮B在其onClickListener中执行一些其他工作。Android:单击Activity.onPause()后的事件

当我点击按钮B并立即在按钮A之后启动新的活动时,会触发旧活动的onPause()生命周期事件,同时也触发第二个按钮的onClick事件,但在Activity.onPause()之后导致我的应用程序中出现一些状态不一致的情况。

有什么办法来防止触摸/点击来自的onPause()之后被传递事件,而无需使用isPaused得到标志?

**编辑:**我的代码:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button buttonA = (Button) findViewById(R.id.activity_button); 
     buttonA.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(MainActivity.this, TestActivity.class)); 
      } 
     }); 

     Button buttonB = (Button) findViewById(R.id.log_button); 
     buttonB.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.e("TEST", "onClick"); 
      } 
     }); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     Log.e("TEST", "onPause"); 
    } 
} 

基本上如果你足够快,点击按钮A则B的onClick在onPause被解雇后后按键B正确。

+1

您可以发布一些您正在尝试做的事情的代码,以便让任何想要帮助的人更清楚吗? –

+0

我只是不希望点击事件在onPause()被触发后被传递。 – Mariusz

+0

onClick事件没有办法自动触发。如果你把你的代码,那么我们可以更好地了解我们的问题 – Sayem

回答

2

在按钮A的OnClickListener,禁用按钮B。

Button.setEnabled(false); 

只需在A的onClickListener或onResume上启用按钮,具体取决于您的要求。

+0

感谢这个答案,但是如果我的视图层次结构非常复杂,我将不得不禁用很多视图。 – Mariusz

+1

@Mariusz覆盖'Activity#dispatchTouchEvent(MotionEvent ev)'然后 – pskink