简体   繁体   English

从其他活动返回后,OnClickListener停止工作

[英]OnClickListener stops working after returning from another activity

For some reason when I call startActivityForResult within a button listener, and return from the activity, all the buttons stop working thereafter. 由于某些原因,当我在按钮侦听器中调用startActivityForResult并从活动中返回时,此后所有按钮都停止工作。 It goes through and exits onActivityResult just fine, and the app doesn't freeze since I can still click on the buttons although they don't do anything. 它会通过并退出onActivityResult很好,并且该应用程序不会冻结,因为尽管它们没有执行任何操作,但我仍然可以单击按钮。 When starting the app it works as it should. 启动应用程序时,它可以正常工作。 What am I missing here? 我在这里想念什么?

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

The setContentView() call you have in onActivityResult() is replacing the layout you've setup in onCreate() , so those Button instances that you set the OnClickListener s on are gone. 您在onActivityResult()setContentView()调用将替换您在onCreate()设置的布局,因此设置了OnClickListener的那些Button实例都消失了。

Simply remove that call from the top of onActivityResult() . 只需从onActivityResult()的顶部删除该调用即可。

put this code in onResume method 将此代码放在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);
        }
    });

also this code can be generally simplified by extending youre class to View.OnClickListener 也可以通过将您的类扩展到View.OnClickListener来简化此代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 setText()在另一个Activity的onClickListener上不起作用 - setText() not working from another Activity's onClickListener Onclicklistener从活动返回片段无效 - Onclicklistener Return To Fragment From Activity Not Working 从另一个活动返回后防止recyclerview重新加载 - Preventing recyclerview from reloading after returning back from another activity 从另一个函数调用一个函数后,App停止工作 - App stops working after a function is called from another function 如何使onClickListener接收来自其他活动的Intent信息 - How to make onClickListener receive Intent information from another activity 使用setText和onClickListener将数据从EditText传输到另一个活动的TextView吗? - Transfer data from EditText to TextView of another activity using setText and onClickListener? 从RecyclerView内的onClickListener开始活动后,出现NullPointerException - NullPointerException after starting activity from onClickListener inside RecyclerView setContentView之后onClickListener不起作用 - onClickListener not working after setContentView 从Android活动返回字符串(在onClickListener内以`startActivityForResult`开头)返回null - Returning string from Android Activity started with `startActivityForResult` inside `onClickListener` returns null View.OnClickListener 没有切换到另一个活动 - View.OnClickListener not switching to another activity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM