2017-03-15 39 views
0

由于某种原因,当我在按钮侦听器中调用startActivityForResult并从活动返回时,此后所有按钮都停止工作。它通过并退出onActivityResult就好了,应用程序不冻结,因为我仍然可以点击按钮,尽管他们什么都不做。启动应用程序时,它的工作原理应该如此。我在这里错过了什么?OnClickListener在从另一个活动返回后停止工作

public class MainActivity extends Activity { 

    static final int CAMERA_RESULT_CODE = 1; 
    static final int INFO_RESULT_CODE = 2; 
    static final int SYMPTOM_RESULT_CODE = 3; 

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

     // Set the user interface elements 
     final Button btnCameraActivity = (Button) findViewById(R.id.btnCameraActivity); 
     btnCameraActivity.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, CropActivity.class); 
       startActivityForResult(intent, CAMERA_RESULT_CODE); 
      } 
     }); 

     final Button btnAgeActivity = (Button) findViewById(R.id.btnAgeActivity); 
     btnAgeActivity.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, AgeActivity.class); 
       startActivityForResult(intent, INFO_RESULT_CODE); 
      } 
     }); 

     final Button btnSymptomActivity = (Button) findViewById(R.id.btnSymptomActivity); 
     btnSymptomActivity.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, SymptomActivity.class); 
       startActivityForResult(intent, SYMPTOM_RESULT_CODE); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     setContentView(R.layout.activity_main); 
     switch (requestCode) { 
      case CAMERA_RESULT_CODE: 
       if (resultCode == RESULT_OK) { 
        final CheckBox cb1 = (CheckBox) findViewById(R.id.cbCameraActivity); 
        cb1.setChecked(true); 
       } 
       break; 
      case INFO_RESULT_CODE: 
       if (resultCode == RESULT_OK) { 
        final CheckBox cb2 = (CheckBox) findViewById(R.id.cbAgeActivity); 
        cb2.setChecked(true); 
       } 
       break; 
      case SYMPTOM_RESULT_CODE: 
       if (resultCode == RESULT_OK) { 
        final CheckBox cb3 = (CheckBox) findViewById(R.id.cbSymptomActivity); 
        cb3.setChecked(true); 
       } 
       break; 
     } 
    } 
} 
+0

摆脱'onActivityResult()'中的'setContentView()'调用。它重新设置布局,并且所有新的'Button'实例没有设置任何监听器。 –

+1

啊,谢谢你,就是这样。把它作为答案,我可以接受 –

回答

3

setContentView()打电话给你有onActivityResult()替换的布局你”已经设置在onCreate()中,因此您设置OnClickListener的那些Button实例已不存在。

只需从onActivityResult()的顶部删除该呼叫。

0

把这个代码在onResume方法

final Button btnCameraActivity = (Button) findViewById(R.id.btnCameraActivity); 
    btnCameraActivity.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, CropActivity.class); 
      startActivityForResult(intent, CAMERA_RESULT_CODE); 
     } 
    }); 

    final Button btnAgeActivity = (Button) findViewById(R.id.btnAgeActivity); 
    btnAgeActivity.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, AgeActivity.class); 
      startActivityForResult(intent, INFO_RESULT_CODE); 
     } 
    }); 

    final Button btnSymptomActivity = (Button) findViewById(R.id.btnSymptomActivity); 
    btnSymptomActivity.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, SymptomActivity.class); 
      startActivityForResult(intent, SYMPTOM_RESULT_CODE); 
     } 
    }); 

还此代码可以通过扩展的youre类通常被简化为View.OnClickListener

相关问题