Android studio中intent切换页面问题

img

img

img


为什么我写了个按钮对象然后设置了个单击事件让它点击的时候会切换到另一个页面上,但是他反馈

img

img


我把写的按钮删了它就又可以正常运行了,是我按钮写的不对吗

img


我一猜就是空指针问题。你button findViewById在外面,布局都没加载进activity就findViewById,button肯定是空的。
谁教你这么获取控件的,你知道setContentView和findViewById干啥用的吗?

你按钮的那个findViewById写在onCreate里的

【相关推荐】



  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7746460
  • 这篇博客你也可以参考下:Android开发课程实验报告③ intent的使用
  • 同时,你还可以查看手册:android Intent 意图是对要执行的操作的抽象描述。 中的内容
  • 除此之外, 这篇博客: Android studio Intent的使用中的 2.2返回数据给上一个活动 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    我们还以俩个活动为例MainActivity和MainAcitivity2:

    MainActivity:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //首先定义一个按钮
            Button but = (Button) findViewById(R.id.but);
            //按钮监听事件
            but.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                    /*startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是求
                      码,用于在之后的回调中判断数据的来源(请求码-----唯一就可以)*/
                    startActivityForResult(intent,1);
                }
            });
        }
    
    
        @Override
        //重写onActivityResult
        //第一个参数 requestCode,即我们在启动活动时传入的请求码。第二个参数 resultCode,即我们在返回数据时传入的处理结果。第三个参数 data,即携带着返回数据的 Intent,下面就不做解释了
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            switch(requestCode){
                case 1:
                    if(resultCode == RESULT_OK){
                        String data_return = data.getStringExtra("data_return");
                        Toast.makeText(this, ""+data_return, Toast.LENGTH_SHORT).show();
                    }
                    break;
                default:
                    break;
            }
        }

    Main2Activity:

    public class Main2Activity extends AppCompatActivity {
    
        @Override
        //当用户按下 Back 键,就会去执行 onBackPressed()方法中的代码,我们在这里添加返回数据的逻辑就行了
        //这里就不做解释了,自己捂捂
        public void onBackPressed() {
            Intent intent = new Intent();
            intent.putExtra("data_return","Hello");
            setResult(RESULT_OK,intent);
            finish();
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            //这俩步就不用多说了吧阿巴阿巴
            Button but2 = (Button) findViewById(R.id.but2);
            but2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //构建一个Intent,用来传数据而已,并没有其他意图
                    Intent intent = new Intent();
                    //用putExtra方法,来传输键值对
                    intent.putExtra("data_return","Hello MainActivity");
                    /*setResult方法接收俩个参数,第一个参数用于向上一个活动返回处理结果,一 般只 使用 			RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去*/
                    setResult(RESULT_OK,intent);
                    //销毁当前活动
                    finish();
                }
            });
    
        }
    }
    


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^