android使用Intent实现页面跳转--startActivity()与startActivityForResult()

android页面间的页面跳转,类似于标签,不同的是android有自己独特的第二种方式,也就是有返回值的startActivityForResult()方式。

1.第一种startActivity()比较简单,只需要在参数列表里传一个Intent对象,指明跳转前后的页

/*有返回值的跳转,还需要一个方法来接受返回值第二个参数为请求码,用于区分不同的跳转,可以根据业务需求自己编号*/
startActivityForResult(intent,1);

面就行了:

Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
startActivity(intent);
Intent的参数列表中要传两个上下文对象,可以直接用  类名.class的形式 ,也可以定义Conext对象,将其传的参数列表中

private Context mContext;
mContext = this;
然后就可以利用Button来实现Activity间的跳转了。

写完回来补充点内容。。

在页面跳转时,后面的页面可以有返回值,同样在跳转时,页面也可以传递给要跳转页面特定的值。

实现:

第一个页面Activity代码:

Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
                /*
                    像后一个页面传值
                 */
                String ns = "前一个页面传递的消息";
                intent.putExtra("primess",ns);
                startActivity(intent);

跳转目标页面的代码:

//前一个页面传过来的值
Intent intent = getIntent();
String bdata = intent.getStringExtra("primess");


2.带参数的startActivityForResult()跳转比第一种要复杂,毕竟要涉及参数的传递

大体的过程就是在第一个页面定义好要跳转的两个Activity(这里与第一种类似,用Intent对象指定,然后用startActivityForResult传一个Intent就行了

Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
startActivityForResult(intent,1);
然后就要指定传递的数据了。android规定要用两个鉴别码来区别不同的跳转(一个app中可能会有多个待参数的跳转,活着一个页面也可能给多个不同的页面返回不同的值,所以要有区分)

/*
有返回值的跳转,还需要一个方法来接受返回值第二个参数为请求码,用于区分不同的跳转,可以根据业务需求自己编号*/
startActivityForResult(intent,1);
在第一个页面中定义onActivityResult()方法来获取返回的值,在这个方法中就要用到 两个鉴别码,通过if判断它们来获取值

在第二个页面来指定返回的值(页面之间的返回值实际为一个Intent对象所以在接受值的时候还有用到getStringExtra()等类似的方法),用setResult()方法来指定返回值的鉴别码和返回它

Intent data = new Intent();
data.putExtra("data",content);//封装好数据
setResult(2,data);


完整代码:

Activity1:

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class IntentTestActivity extends AppCompatActivity {
    Button but1,but2;
    TextView tv;
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_test);
        but1 = (Button)findViewById(R.id.itentbutton1);
        but2 = (Button)findViewById(R.id.itentbutton2);
        tv = (TextView)findViewById(R.id.itenttv);
        mContext = this;
        but1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /*
                mContext:上下文对象,这个方法指定从哪个Activity跳转到哪个,也可以直接用IntentTestActivity.this,但是不能直接用this
                 */
                Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
                startActivity(intent);
            }
        });
        but2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /*
                mContext:上下文对象,这个方法指定从哪个Activity跳转到哪个,也可以直接用IntentTestActivity.this,但是不能直接用this
                 */
                Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
                /*
                有返回值的跳转,还需要一个方法来接受返回值
                第二个参数为请求码,用于区分不同的跳转,可以根据业务需求自己编号
                 */
                startActivityForResult(intent,1);
            }
        });
    }
     /*
     通过startActivityForResult的跳转,接受返回数据的方法
      */

    @Override
    /*
    requestCode:请求的标志
    resultCode:第二个页面返回的标志
    data:第二个页面回传的数据
     */
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && resultCode == 2){//通过请求码和返回码区分不同的返回
            String content = data.getStringExtra("data");//data:后一个页面putExtra()中设置的键名
            tv.setText(content);
        }
    }
}

layout1:





    

Activity2:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class IntentTestReturnActivity extends AppCompatActivity {
    Button but;
    private String content = "返回的值";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_test_return);
        but = (Button)findViewById(R.id.itentreturn);
        /*
        第二个页面返回给第一个页面的实际上是一个Intent对象
         */
        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                返回的Intent
                Intent data = new Intent();
                //键名=>键值的形式
                data.putExtra("data",content);//封装好数据
                /*
                resultContent:返回标识符,区分不同的返回
                data:返回的Intent对象(数据)
                 */
                 setResult(2,data);
//                 结束当前页面
                 finish();
//                 至此返回值已经就绪,需要在前一个页面去接受
            }
        });
    }
}

layout2:







    


运行效果:


 
   
  

android使用Intent实现页面跳转--startActivity()与startActivityForResult()_第1张图片

android使用Intent实现页面跳转--startActivity()与startActivityForResult()_第2张图片android使用Intent实现页面跳转--startActivity()与startActivityForResult()_第3张图片

 
  
 
  

 
  



 
 

你可能感兴趣的:(android)