两按钮跳转到同一个activity中,判断是哪个按钮跳转过来的方法

版权声明:出于感谢(如果有收获)或对知识的尊重,未经允许禁止转载 https://blog.csdn.net/bendan50/article/details/79900315

第一篇博客,不是为了什么分享,只是为了强迫自己去整理踩过的坑,工作了,要在一点一滴中总结进步。

---写在前面的话。

正文:

学习安卓开发中遇到一个问题:关于界面(activity)间跳转并传值的问题。

界面A中有两个Button(记为Button1和Button2),都跳转到界面B,但Button1没有值的传递,而Button2中包含了值的传递。两者的代码如下:

 Button1的代码:dialogButton
final Button dialogButton = (Button)findViewById(R.id.Button4);//获得句柄
//设置监听
dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this,TestDialog.class);//设置跳转关系
                startActivity(intent);
            }
        });
Button2的代码:intentButon
final Button intentButton = (Button)findViewById(R.id.Button5);//获得句柄
intentButton.setOnClickListener(new View.OnClickListener() {//设置监听
            @Override
            public void onClick(View v) {
                Bundle datain = new Bundle();
                datain.putString("name",editText.getText().toString());//putString(<k,v>)存入的是Map类似的数据,键值对
                datain.putInt("flag",1);//区别的关键,缺少该句会报错
                Intent intent = new Intent(MainActivity.this,TestDialog.class);
                intent.putExtras(datain);
                startActivity(intent);
            }
        });

Button2的监听是将EditText控件中的输入文本传到TestDialog界面显示;Button1只是简单的跳转。

逻辑:

为了在TestDialog中接收Button2传过来的值,其代码为:

final TextView tv = (TextView)findViewById(R.id.TextViewIntentOut);//获得用来显示信息的控件
        Intent intent = getIntent();
        //tv.setText(intent.getExtras().getString("name"));
        try{
if(intent.getExtras() != null){ if (intent.getExtras().getInt("flag") == 1) tv.setText(intent.getExtras().getString("name"));//显示传递过来的信息,getString();根据键,取值 } }catch (NullPointerException e){ e.printStackTrace(); return; }这是正确的代码编写方案,错误的如下:
final TextView tv = (TextView)findViewById(R.id.TextViewIntentOut);//获得用来显示信息的控件
        Intent intent = getIntent();
        tv.setText(intent.getExtras().getString("name"));

即:直接设置TextView控件的值。这样的代码,当触发Button2时可以正常运行,但是当触发Button1时则会报错。为记录具体,错误信息如下:

 FATAL EXCEPTION: main
                                                   Process: com.crsh.myapplication, PID: 14201
                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.migu.crsh.myapplication/com.migu.crsh.myapplication.TestDialog}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2773)
                                                       at android.app.ActivityThread.access$900(ActivityThread.java:186)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1597)
                                                       at android.os.Handler.dispatchMessage(Handler.java:111)
                                                       at android.os.Looper.loop(Looper.java:194)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5884)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1099)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:865)
                                                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
                                                       at com.migu.crsh.myapplication.TestDialog.onCreate(TestDialog.java:39)
                                                       at android.app.Activity.performCreate(Activity.java:6200)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2640)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2773) 
                                                       at android.app.ActivityThread.access$900(ActivityThread.java:186) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1597) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                       at android.os.Looper.loop(Looper.java:194) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5884) 

其实,图片可能直观点:

扫描二维码关注公众号,回复: 3240902 查看本文章


原因是:调用intent.getExtras();时,根本没有传入Bundle对象,自然获取不得,返回结果为null。

综上:通过

new Bundle().putInt("flag",flagValue);

设置不同的flag与值,再在结果界面(activity)中判断。可知是哪个按钮触发的跳转。

结尾:处女博客完成,略开心。每天进步一点就好。

猜你喜欢

转载自blog.csdn.net/bendan50/article/details/79900315