zoukankan      html  css  js  c++  java
  • Andoid Intent学习之在各个活动之间传递数据

           Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。

    1、使用Intent向下一个活动传递数据

    1. 在activity_main.xml中添加一个Button
    <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=".MainActivity">
    
        <Button
            android:id="@+id/btn1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/btn1"
            />
    
    </LinearLayout>

        2.在MainActivity中为Button1写监听事件

     (Button) findViewById(R.id.btn1).setOnClickListener(new              View.OnClickListener() {
                @Override 
                public void onClick(View v) {
                    /*
                    利用Intent传递数据给下一个活动
                     */
                   String data = "Hello World !!!";
                   Intent intent = new Intent();
                    intent.setClass(MainActivity.this,SecondActivity.class);
                    intent.putExtra("extra_data",data);
                    startActivity(intent);
    });

       3.新建一个SecondActivity,接收来自MainActivity的数据

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_second);
            /*
            利用Intent传递数据给下一个活动
             */
           Intent intent = getIntent();
          String data = intent.getStringExtra("extra_data");
         Toast.makeText(SecondActivity.this,data,Toast.LENGTH_SHORT).show();
    }

    2、利用Intent返回数据给上一个活动

        1.在SecondActivity添加一个Button2

    <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"
        android:orientation="vertical"
        tools:context="com.tony.intenttest.SecondActivity">
    
    
        <Button
            android:id="@+id/btn2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/btn2"
            />
    </LinearLayout>

         2.在MainActivity中为Button1写监听事件

    public class MainActivity extends Activity {
    
        private Button btn1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main);
            btn1 = (Button) findViewById(R.id.btn1);
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    /*
                    利用Intent返回数据给上一个活动
                     */
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    startActivityForResult(intent, 1);
                }
            });
    
        }

    说明:startActivityForResult()方法接收另个参数,第一个参数还是Intent,第二个参数是请求码(请求码只要是一个唯一值就行了),用于在之后的回调中判断数据的来源。

         3.在SecondActivity中为Button2注册点击事件

    public class SecondActivity extends Activity {
    
        private Button btn2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_second);
    
            /*
            利用Intent返回数据给上一个活动
             */
            btn2 = (Button) findViewById(R.id.btn2);
            btn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("return_data","Hello MainActivity !!!");
                    setResult(RESULT_OK,intent);
                    finish();
                }
            });
        }
        
        /*
        onBackPressed()方法是如果按返回键(Back键)则调用该方法
         */
        @Override
        public void onBackPressed(){
            Intent intent = new Intent();
            intent.putExtra("return_data","Hello MainActivity !!!");
            setResult(RESULT_OK,intent);
            finish();
        }
    }

    说明:putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数才是要传递的数据。

    这里又构建了一个Intent,只不过这个Intent仅仅是用来传递数据而已,它没有指定任何的“意图”。紧接着把要传递的数据放在Intent中,调用setResult()方法。

    setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK和RESULT_CANCLED,第二个参数则是把带有数据的Intent传递回去,然后调用finish()方法销毁当前活动。

         4.在MainActivity中接收数据,重写onActivityResult()方法。

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
                case 1:
                    if (resultCode == RESULT_OK) {
                        String returnedData = data.getStringExtra("return_data");
                        Log.d("tag", returnedData);
                    }
                    break;
                default:
            }
        }

    说明:由于采用的是startActivityForResult()方法来启动SecondActivity的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因此,在MainActivity

    中要重写onActivityResult()方法。

    onActivityResult()方法带有三个参数,第一个参数requestCode,即我们在启动活动是传入的请求码,第二个参数resultCode,即我们在返回数据时传入的处理结果。第三个参数data,即携带者返回数据的Intent。

    由于在一个活动中可能会调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调到onActivityResult()这个方法中。因此,要通过检查

    requestCode的值来判断数据来源,确定数据是从SecondActivity返回的之后,在通过resultCode的值来判断处理结果是否成功。

  • 相关阅读:
    C. Shaass and Lights 解析(思維、組合)
    D. Binary String To Subsequences(队列)(贪心)
    CodeForces 1384B2. Koa and the Beach (Hard Version)(贪心)
    CodeForces 1384B1. Koa and the Beach (Easy Version)(搜索)
    CodeForces 1384C. String Transformation 1(贪心)(并查集)
    CodeForces 1384A. Common Prefixes
    POJ-2516 Minimum Cost(最小费用最大流)
    POJ3261-Milk Patterns(后缀数组)
    HDU-1300 Pearls(斜率DP)
    HDU-4528 小明系列故事-捉迷藏(BFS)
  • 原文地址:https://www.cnblogs.com/tonycheng93/p/4564529.html
Copyright © 2011-2022 走看看