• 多个Activity跳转的小结


     第一个例子:demo1 
    Main—>SecondActivity—>Main 
    从流程上看就是从Main跳转到SecondActivity,再从SecondActivity返回到Main。也就是将子Activity的数据返回给父Activity。 
    代码如下: 

    Java代码                          

    1. public class Main extends Activity {  
    2.       
    3.     private Button btn;  
    4.     private TextView request_text;  
    5.     private final int FIRST_REQUEST_CODE = 1;  
    6.       
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         request_text = (TextView)this.findViewById(R.id.request_text);  
    14.           
    15.         btn = (Button)this.findViewById(R.id.btn);  
    16.         btn.setOnClickListener(new OnClickListener() {  
    17.             public void onClick(View v) {  
    18.                 Intent i = new Intent(Main.this,SecondActivity.class);  
    19.                 i.putExtra("request_text_for_main", "从Main传递到SecondActivity");  
    20.                 startActivityForResult(i, FIRST_REQUEST_CODE);  
    21.             }  
    22.         });  
    23.     }  
    24.       
    25.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    26.         super.onActivityResult(requestCode, resultCode, data);  
    27.         if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_OK){  
    28.             if(data != null) {  
    29.                 request_text.setText(data.getStringExtra("request"));  
    30.             }  
    31.         }  
    32.     }  
    33. }  

     

    Java代码  

    1. public class SecondActivity extends Activity{  
    2.       
    3.     private TextView request_text;  
    4.     private Button btn;  
    5.     private String text;  
    6.       
    7.     public void onCreate(Bundle savedInstanceState) {  
    8.         super.onCreate(savedInstanceState);  
    9.         setContentView(R.layout.second);  
    10.           
    11.         request_text = (TextView)this.findViewById(R.id.request_text);  
    12.           
    13.         if (getIntent().getStringExtra("request_text_for_main") != null) {  
    14.             text = getIntent().getStringExtra("request_text_for_main");  
    15.             request_text.setText(text);  
    16.         }  
    17.           
    18.         btn = (Button)this.findViewById(R.id.btn);  
    19.         btn.setOnClickListener(new OnClickListener() {  
    20.             public void onClick(View v) {  
    21.                 Intent i = new Intent();  
    22.                 i.putExtra("request",text+" "+"从SecondActivity传递到ThirdActivity");  
    23.                 setResult(Activity.RESULT_OK,i);  
    24.                 finish();  
    25.             }  
    26.         });  
    27.     }  
    28. }  



     
    图一 

    图一所示是demo初始化的样子,点击“第一次跳转”进入图二。 

     
    图二 
    图二显示从Main到SecondActivity这个过程,再点击“第二次跳转”即返回Main这个Activity。 

     
    图三 
    图三表示跳转结束,Button按钮上面的文字记录跳转的过程。 

    这个例子最主要是第一个Activity Main设置的onActivityResult()方法和startActivityForResult()方法。 
    在Main中通过startActivityForResult()调用SecondActivity,然后在onActivityResult()中获取其返回参数,或者说通过onActivityResult()进行回调。 

    SecondActivity中要返回第一个Main必须: 
    setResult(Activity.RESULT_OK,i); 
    finish(); 


    第二个例子:demo2 
    Main—>SecondActivity—>ThirdActivity—>Main 
    这个例子的流程,比上一个更复杂一些,经历了3个Activity,最好跳转回第一个Activity。 
    代码如下: 

    Java代码  

    1. public class Main extends Activity {  
    2.       
    3.     private Button btn;  
    4.     private TextView request_text;  
    5.     private final int FIRST_REQUEST_CODE = 1;  
    6.       
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         request_text = (TextView)this.findViewById(R.id.request_text);  
    14.           
    15.         btn = (Button)this.findViewById(R.id.btn);  
    16.         btn.setOnClickListener(new OnClickListener() {  
    17.             public void onClick(View v) {  
    18.                 Intent i = new Intent(Main.this,SecondActivity.class);  
    19.                 i.putExtra("request_text_for_main", "从Main传递到SecondActivity");  
    20.                 startActivityForResult(i, FIRST_REQUEST_CODE);  
    21.             }  
    22.         });  
    23.     }  
    24.       
    25.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    26.         super.onActivityResult(requestCode, resultCode, data);  
    27.         if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){  
    28.             if(data != null) {  
    29.                 request_text.setText(data.getStringExtra("request_text_for_third"));  
    30.             }  
    31.         }  
    32.     }  
    33. }  

     

    Java代码  

    1. public class SecondActivity extends Activity{  
    2.   
    3.     private TextView request_text;  
    4.     private Button btn;  
    5.     private final int SECOND_REQUEST_CODE = 2;  
    6.     private String text;  
    7.       
    8.     public void onCreate(Bundle savedInstanceState) {  
    9.         super.onCreate(savedInstanceState);  
    10.         setContentView(R.layout.second);  
    11.           
    12.         request_text = (TextView)this.findViewById(R.id.request_text);  
    13.           
    14.         if (getIntent().getStringExtra("request_text_for_main") != null) {  
    15.             text = getIntent().getStringExtra("request_text_for_main");  
    16.             request_text.setText(text);  
    17.         }  
    18.           
    19.         btn = (Button)this.findViewById(R.id.btn);  
    20.         btn.setOnClickListener(new OnClickListener() {  
    21.             public void onClick(View v) {  
    22.                 Intent i = new Intent(SecondActivity.this,ThirdActivity.class);  
    23.                 i.putExtra("request_text_for_second", text+" "+"从SecondActivity传递到ThirdActivity");  
    24.                 startActivityForResult(i, SECOND_REQUEST_CODE);  
    25.             }  
    26.         });  
    27.     }  
    28.       
    29.     @Override  
    30.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {       
    31.         super.onActivityResult(requestCode, resultCode, data);        
    32.         if(requestCode==SECOND_REQUEST_CODE && data != null){  
    33.             setResult(Activity.RESULT_FIRST_USER, data);  
    34.             finish();  
    35.         }  
    36.     }  
    37. }  



    Java代码  

    1. public class ThirdActivity extends Activity{  
    2.   
    3.     private TextView request_text;  
    4.     private Button btn;  
    5.     private String text;  
    6.       
    7.     public void onCreate(Bundle savedInstanceState) {  
    8.         super.onCreate(savedInstanceState);  
    9.         setContentView(R.layout.third);  
    10.           
    11.         text = getIntent().getStringExtra("request_text_for_second");  
    12.         request_text = (TextView)this.findViewById(R.id.request_text);  
    13.         request_text.setText(text);  
    14.           
    15.         btn = (Button)this.findViewById(R.id.btn);  
    16.         btn.setOnClickListener(new OnClickListener() {  
    17.             public void onClick(View v) {  
    18.                 Intent i = new Intent();  
    19.                 i.putExtra("request_text_for_third", text+" "+"从ThirdActivity再次传递到Main");  
    20.                 setResult(Activity.RESULT_FIRST_USER, i);  
    21.                 finish();  
    22.             }  
    23.         });  
    24.     }  
    25.       
    26. }  



     

     

     

     

    这个demo2比起前面的demo1的不同之处在于就是通过ThirdActivity进行跳转到Main。 
    在代码上的区别是: 
    (1)Main的onActivityResult()方法中,它的resultCode==Activity.RESULT_FIRST_USER而不是前面的resultCode==Activity.RESULT_OK 
    (2)SecondActivity中增加了onActivityResult()方法,该方法是用于回调ThirdActivity,并且该方法执行了跳转过程跳转到Main这个Activity。 
    (3) ThirdActivity和demo1的SecondActivity很类似。 



    第三个例子:demo3 
    Main—>SecondActivity—>ThirdActivity—>SecondActivity—>Main 
    这个过程看起来复杂,其实不然,最后一步是借助SecondActivity的另一个Button实现的。 
    代码如下: 

    Java代码  

    1. public class Main extends Activity {  
    2.     private Button btn;  
    3.     private TextView request_text;  
    4.     private final int FIRST_REQUEST_CODE = 1;  
    5.       
    6.     /** Called when the activity is first created. */  
    7.     @Override  
    8.     public void onCreate(Bundle savedInstanceState) {  
    9.         super.onCreate(savedInstanceState);  
    10.         setContentView(R.layout.main);  
    11.           
    12.         request_text = (TextView)this.findViewById(R.id.request_text);  
    13.           
    14.         btn = (Button)this.findViewById(R.id.btn);  
    15.         btn.setOnClickListener(new OnClickListener() {  
    16.             public void onClick(View v) {  
    17.                 Intent i = new Intent(Main.this,SecondActivity.class);  
    18.                 i.putExtra("request_text_for_main", "从Main传递到SecondActivity");  
    19.                 startActivityForResult(i, FIRST_REQUEST_CODE);  
    20.             }  
    21.         });  
    22.     }  
    23.       
    24.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    25.         super.onActivityResult(requestCode, resultCode, data);  
    26.         if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){  
    27.             if(data != null) {  
    28.                 request_text.setText(data.getStringExtra("final_request"));  
    29.             }  
    30.         }  
    31.     }  
    32. }  

     

    Java代码  

    1. public class SecondActivity extends Activity{  
    2.   
    3.     private TextView request_text;  
    4.     private Button btn,finalBtn;  
    5.     private final int SECOND_REQUEST_CODE = 2;  
    6.     private String text;  
    7.       
    8.     public void onCreate(Bundle savedInstanceState) {  
    9.         super.onCreate(savedInstanceState);  
    10.         setContentView(R.layout.second);  
    11.           
    12.         request_text = (TextView)this.findViewById(R.id.request_text);  
    13.           
    14.         if (getIntent().getStringExtra("request_text_for_main") != null) {  
    15.             text = getIntent().getStringExtra("request_text_for_main");  
    16.             request_text.setText(text);  
    17.         }  
    18.           
    19.         btn = (Button)this.findViewById(R.id.btn);  
    20.         btn.setOnClickListener(new OnClickListener() {  
    21.             public void onClick(View v) {  
    22.                 Intent i = new Intent(SecondActivity.this,ThirdActivity.class);  
    23.                 i.putExtra("request_text_for_second", text+" "+"从SecondActivity传递到ThirdActivity");  
    24.                 startActivityForResult(i, SECOND_REQUEST_CODE);  
    25.             }  
    26.         });  
    27.           
    28.         finalBtn = (Button)this.findViewById(R.id.finalBtn);  
    29.         finalBtn.setOnClickListener(new OnClickListener() {  
    30.             public void onClick(View v) {  
    31.                 Intent i = new Intent();  
    32.                 i.putExtra("final_request", text+" "+"从SecondActivity最后传递到Main");  
    33.                 setResult(Activity.RESULT_FIRST_USER,i);  
    34.                 finish();  
    35.             }  
    36.         });  
    37.     }  
    38.       
    39.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    40.         super.onActivityResult(requestCode, resultCode, data);  
    41.         if(requestCode==SECOND_REQUEST_CODE && resultCode==Activity.RESULT_OK){  
    42.             if(data != null) {  
    43.                 text = data.getStringExtra("request_text_for_third");  
    44.                 request_text.setText(text);  
    45.             }  
    46.         }  
    47.     }  
    48. }  

     

    Java代码  

    1. public class ThirdActivity extends Activity{  
    2.   
    3.     private TextView request_text;  
    4.     private Button btn;  
    5.     private String text;  
    6.       
    7.     public void onCreate(Bundle savedInstanceState) {  
    8.         super.onCreate(savedInstanceState);  
    9.         setContentView(R.layout.third);  
    10.           
    11.         text = getIntent().getStringExtra("request_text_for_second");  
    12.         request_text = (TextView)this.findViewById(R.id.request_text);  
    13.         request_text.setText(text);  
    14.           
    15.         btn = (Button)this.findViewById(R.id.btn);  
    16.         btn.setOnClickListener(new OnClickListener() {  
    17.             public void onClick(View v) {  
    18.                 Intent i = new Intent();  
    19.                 i.putExtra("request_text_for_third", text+" "+"从ThirdActivity再次传递到SecondActivity");  
    20.                 setResult(Activity.RESULT_OK, i);  
    21.                 finish();  
    22.             }  
    23.         });  
    24.     }  
    25. }  



     

     

     

     

     


    比起前一个demo2其实没有更复杂之处,只是从ThirdActivity跳转回SecondActivity,而通过SecondActivity的另一个Button来跳转回Main的。 

  • 相关阅读:
    java 字符串split有很多坑,使用时请小心!!
    Java并发编程:线程池的使用
    java自带线程池和队列详细讲解
    merge into的用法
    Oracle中如何使用REGEXP_SUBSTR函数
    oracle分组统计某列逗号隔开数据
    oracle一列中的数据有多个手机号码用逗号隔开,我如何分别取出来?
    css box-shadow使用---转
    201706问题记录
    201705问题记录
  • 原文地址:https://www.cnblogs.com/leihupqrst/p/3552224.html
Copyright © 2020-2023  润新知