• 【转】android的startActivityForResult学习心得


    http://blog.csdn.net/yanzi1225627/article/details/7800529

    从昨晚到现在终于调试通了一个startActivityForResult的例子,网上要么有些说的太复杂了,要么说的含糊,搞的我走了很多弯路,所以写篇心得。

         在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主Activity处理。  用startActivity启动主界面是一个新的Intent实例,而访问的主界面还在activity栈的下面没有调出来,这样做的一个最大的问题是,回不到原界面就不能多个子功能模块共同来给主界面提供数据或服务了。这个时候就要用startActivityForResult了!

    目的: MainActivity.java 是主界面,SecondActivity.java 是子功能模块,要从main启动second,second收到main发来的数据干完活之后,按按键OK会把结果汇报给main,同时自己关闭返回到main。

    具体实现:

    分四部分:

    1,在MainActivity里面设置一个按钮sendBuddle,发送数据到SecondActivity,同时跳转到second界面。按键监听代码:

    class sendButtonListen implements OnClickListener{


    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent();
    String str = "dajia hao ";
    intent.putExtra("send", str);
    intent.setClass(MainActivity.this, SecondActivity.class);
    startActivityForResult(intent, 0);
    }
        
        }

    2,在SecondActivity里面的OnCreate函数里,接收来自main里的intent发来的数据。

    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            okButton = (Button)findViewById(R.id.ok); //按这个ok按键,会返回到main。       
            Intent intent = getIntent();        
            String getStr = intent.getStringExtra("send");
            TextView tv = (TextView)findViewById(R.id.sendText);
            tv.setText(getStr);
            Toast.makeText(SecondActivity.this,
            "从MainActivity传回来的数据是:"+getStr,
            Toast.LENGTH_SHORT).show();
            okButton.setOnClickListener(new okButtonListen());         
         
            
        }

    3,在SecondActivity里实现监听Ok按键,按下后返回到MainActivity,同时自己关闭,并给MainActivity发送数据。ok按键的监听代码如下:

     class okButtonListen implements OnClickListener{


    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent sendIntent = new Intent(SecondActivity.this, MainActivity.class);//这种方法今天才学的,记下!方便这样写,坑爹的有些教程,这块没有给Inent绑定
           Bundle bundle = new Bundle();
           bundle.putString("send", "大家好");
           sendIntent.putExtras(bundle);
           SecondActivity.this.setResult(RESULT_OK, sendIntent);
           SecondActivity.this.finish();

    }


    4,返回到main后,main要接收second发来的数据。在MainActivity里复写它的OnActivityResult方法。

     @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode==RESULT_OK){
    Bundle bundle = data.getExtras();
    String str = bundle.getString("send");
    Toast.makeText(MainActivity.this,
    "我回来的,第二个activity传回的数据是:"+str,
    Toast.LENGTH_SHORT).show();

    }
    }

    注意:这里面不要再新建Intent,onActivityResult有三个参数,第三个参数就是Intent,只需要用他做参数就行了。

    写的应该相当清楚了,不清楚的留言问我!共同学习。。

  • 相关阅读:
    如何解决虚拟机频繁分离和附加磁盘导致的识别错误
    创建基于 AFS 的 Docker 容器卷
    使用 docker-machine 管理 Azure 容器虚拟机
    SSH 无法启动的原因分析及解决方法
    Azure 经典模式中虚拟机证书指纹的生成和作用
    远程桌面到 Ubuntu 虚拟机
    Azure Linux 虚拟机常见导致无法远程的操作
    Azure Linux 虚机上配置 RAID 的常见问题及解决方案
    使用 Azure CLI 在 Azure China Cloud 云平台上手动部署一套 Cloud Foundry
    数据库设计(六)第二范式(2NF)?
  • 原文地址:https://www.cnblogs.com/tc310/p/4523422.html
Copyright © 2020-2023  润新知