Android Activity之间信息的传递

    在Android中,活动是一个界面,当需要在界面之间相互切换的时候,需要用到Intent(意图)进行消息传递。使用startActivity(Intent)函数启动另一个活动。

    Bundle是一个key-Value类,可以用他携带信息。

    Bundle.putString("key","String")方法和Bundle.getString("key")方法放入与取出信息。

    可以将信息放入到Intent中,使用方法Intent.putExtras(bundle)方法和Intent.getExtras();方法将信息放入和取出。


示例工程:两个.java,MainActivity,java中输入字符串,点击按键,启动NewActivity,java,并将字符串显示出来。

详细代码如下:

    MainActivity.java:

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Build;
public class MainActivity extends Activity {
    EditText edittext;
    TextView textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button botton1=(Button)this.findViewById(R.id.btn1);
        edittext=(EditText)this.findViewById(R.id.edit);
        textview=(TextView)this.findViewById(R.id.mytext1);
        botton1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(MainActivity.this,NewActivity.class);
                Bundle bundle=new Bundle();
                bundle.putString("name", edittext.getText().toString());
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }
}

NewActivity.java:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class NewActivity extends Activity {
    TextView textview;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
        Button botton1=(Button)this.findViewById(R.id.btn2);
        textview=(TextView)this.findViewById(R.id.mytext3);
        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();
        textview.setText(bundle.getString("name"));
        botton1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                startActivity(new Intent(NewActivity.this,MainActivity.class));
            }
        });
    }
}

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView android:id="@+id/mytext1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="mainactivity"/>
    <EditText android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""/>
    <Button android:id="@+id/btn1" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="tonew"/>    
</LinearLayout>

activity_new:

<?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/mytext2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="newactivity"/>
    <TextView android:id="@+id/mytext3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""/>
    <Button android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="tomain"/>
</LinearLayout>

效果如下:

技术分享  技术分享 

              

                            启动Activity并返回结果

    有时候我们学院启动一个Activity并返回其结果,这是我们应该使用方法:

startActivityForResult(Intent intent,int requestCode);

    通过重写onActivityResult()对返回的参数进行处理,函数原型为:

protected void onActivityResult(int requestCode,int resultCode,Intent data)    //    请求码与结果码

    使用函数NewActivity.this.setResult(0,intent)和NewActivity.this.finish()设置返回参数


以上一个工程为基础,添加代码。使NewActivity.java中按键返回字符串,然后在MainActivity中把该字符串显示出来。

代码如下:

MainActivity

public class MainActivity extends Activity {
    EditText edittext;
    TextView textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button botton1=(Button)this.findViewById(R.id.btn1);
        edittext=(EditText)this.findViewById(R.id.edit);
        textview=(TextView)this.findViewById(R.id.mytext1);
        botton1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(MainActivity.this,NewActivity.class);
                Bundle bundle=new Bundle();
                bundle.putString("name", edittext.getText().toString());
                intent.putExtras(bundle);
                startActivityForResult(intent,0);
            }
        });
    }
    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
        Bundle bundle=data.getExtras();
        textview.setText(bundle.getString("name"));
    }
}

NewActivity:

public class NewActivity extends Activity {
    private TextView textview;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
        Button botton1=(Button)this.findViewById(R.id.btn2);
        textview=(TextView)this.findViewById(R.id.mytext3);
        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();
        textview.setText(bundle.getString("name"));
        botton1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                Bundle bundle=new Bundle();
                bundle.putString("name", "I‘m from New");
                intent.putExtras(bundle);
                NewActivity.this.setResult(0,intent);
                NewActivity.this.finish();
            }
        });
    }
}


效果如下:

技术分享技术分享

技术分享


                                请求码与结果码

    请求码:当不同业务打开同一个Activity时,用请求码判断是那个业务发出的打开请求。

例如当一个MainActivity中两个button都打开Activity1时,可以设置不同的请求码,然后在Activity1中可根据不同请求码判断是button1还是button2打开的Activity1。


    结果码:当同一个业务打开多个Activity时,用结果码判断是那个Activity返回的参数。

例如当MainActivity中button同时打开Activity1,Activity2,Activity3,可以在三个Activity中设置不同的结果码,然后在MainActivity中的方法onActivityResult中根据结果码判断次结果是那个Activity返回的。


本文出自 “无用大叔” 博客,请务必保留此出处http://aslonely.blog.51cto.com/6552465/1615013

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。