zoukankan      html  css  js  c++  java
  • Android学习总结——获取被启动的Activity传回的数据

    当前Activity:包含一个Button和一个TextView,用于启动另一个Activity和显示传回的数据,这里重写了onActivityResult()方法。

    public class MainActivity extends AppCompatActivity {
    
        private TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //找到TextView
            textView=(TextView)findViewById(R.id.textView);
    
    
            findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
    
                     startActivityForResult(intent,0);
    
                }
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            textView.setText("另外一个Activity传回来的数据是:"+data.getStringExtra("data"));
        }
    }

    XML文件:activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context="com.example.androidtest.MainActivity">
    
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="启动另一个Activity"
            android:id="@+id/btnSend" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/textView" />
    </LinearLayout>

    被启动的Activity:包含一个Button和editText,用于将数据发送回去和输入要传的数据。

    public class AnotherActivity extends AppCompatActivity {
    
        private EditText editText;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_another);
            editText= (EditText) findViewById(R.id.editText);

    Button button= (Button) findViewById(R.id.btnSendBack); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //返回结果 Intent i=new Intent(); i.putExtra("data",editText.getText().toString()); setResult(1,i); finish(); } }); } }

    xml文件:activity_another.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context="com.example.androidtest.AnotherActivity">
    
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发送回去"
            android:id="@+id/btnSendBack"/>
    
    </LinearLayout>

    运行结果:

                   

    补充:这里点击发送回去按钮返回上一个Activity没有问题,但是如果点系统自带的返回键就会出错了,出现此bug的原因就是resultCode没有判断,点击系统自带的返回键的resultCode==RESULT_CANCELED,所以是不一样的

    解决方法:所以这里的requestCode和resultCode就能发挥作用了,在上述程序中requestCode==0,resultCode==1,也就是需要判断是否是跳转到该Activity以及返回上一个Activity是通过该按钮还是通过系统返回键来进行的,所以MainActivity中的onActivityResult()方法可以改进为:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode==0){
                if(resultCode==1){
                    textView.setText("另外一个Activity传回来的数据是:"+data.getStringExtra("data"));
                }
            }
        }

    转载请注明:http://www.cnblogs.com/xch-yang/p/5685702.html 

  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/xch-yang/p/5685702.html
Copyright © 2011-2022 走看看