intent,实现两个活动之间数据的传递

一、Intent 可以启动一个活动,也可以在启动活动的时候传递数据。intent中提供了putExtra()方法,它可以把我们想要传递的数据暂存在intent中,启动了另一个活动后,通过getIntent().getStringExtra()、(或者getIntent().getIntExtra()通过活动传递的数据类型决定),再从 Intent中取出。

二、如果需要返回数据给上一个活动,则不在用startActivity()方法启动活动,而是通过startActivityForResult()方法来启动活动,这个方法是期望在活动销毁的时候能够返回一个结果给上一个活动。并且需要通过onActivityResult()方法来得到返回的数据。

三、本次要演示的代码为,通过点击activity_main.xml中的按钮传递数据,给act2.xml中的textView。然后,通过点击act2.xml的按钮返回一个数据给acitvity.main中的textView。

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<TextView
    android:id="@+id/tv_back"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="mainActivity界面"/>
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转"/>
</LinearLayout>

act2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="act2界面"/>
    <Button
        android:id="@+id/btn_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回mainActivity"/>
</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private Button mIntentButton;
    private TextView mTvBack;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTvBack = (TextView) findViewById(R.id.tv_back);
        mIntentButton = (Button) findViewById(R.id.btn);
        mIntentButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,Act2.class);
                //使用putExtra()方法传递数据
                intent.putExtra("name","从mainActivity传过来的数据");
                //由于需要返回数据,使用 startActivityForResult()方法
                startActivityForResult(intent,1);
            }
        });
    }
    //此方法是用来接收返回的数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1){
            if(resultCode == RESULT_OK){
                String st = data.getStringExtra("back");
                mTvBack.setText(st);

            }
        }
    }
}

Act2.java:

public class Act2 extends AppCompatActivity{
    private TextView mTv;
    private Button mBtnBack;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
        //接收intent数据
        String var = getIntent().getStringExtra("name");
        mTv = (TextView) findViewById(R.id.tv);
        mTv.setText(var);
        mBtnBack = (Button) findViewById(R.id.btn_back);
        mBtnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.putExtra("back","返回到mainactivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });

    }
}

 来自个人博客:intent,实现两个活动之间数据的传递

posted on 2017-03-14 21:37  懂你在爱我  阅读(1353)  评论(0)    收藏  举报

导航