`
fengzhizi715
  • 浏览: 159942 次
  • 性别: Icon_minigender_1
  • 来自: 上海 苏州
社区版块
存档分类
最新评论

多个Activity跳转的小结

阅读更多
转载请注明出处

在android开发中Activity相当于web开发的页面,或者说如j2ee开发中对应的jsp页面。在开发jsp时,经常会遇到页面跳转的问题,在android也同样会遇到。以下的几个例子是我对android的Activity跳转的小结,也是最近做项目的小结。

第一个例子:demo1
Main—>SecondActivity—>Main
从流程上看就是从Main跳转到SecondActivity,再从SecondActivity返回到Main。也就是将子Activity的数据返回给父Activity。
代码如下:
public class Main extends Activity {
	
	private Button btn;
	private TextView request_text;
	private final int FIRST_REQUEST_CODE = 1;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        request_text = (TextView)this.findViewById(R.id.request_text);
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent(Main.this,SecondActivity.class);
				i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
				startActivityForResult(i, FIRST_REQUEST_CODE);
			}
		});
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
    	if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_OK){
    		if(data != null) {
    			request_text.setText(data.getStringExtra("request"));
    		}
    	}
    }
}


public class SecondActivity extends Activity{
	
	private TextView request_text;
	private Button btn;
	private String text;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        
        request_text = (TextView)this.findViewById(R.id.request_text);
        
        if (getIntent().getStringExtra("request_text_for_main") != null) {
        	text = getIntent().getStringExtra("request_text_for_main");
        	request_text.setText(text);
        }
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent();
				i.putExtra("request",text+"\n"+"从SecondActivity传递到ThirdActivity");
				setResult(Activity.RESULT_OK,i);
				finish();
			}
		});
	}
}




图一

图一所示是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。
代码如下:
public class Main extends Activity {
	
	private Button btn;
	private TextView request_text;
	private final int FIRST_REQUEST_CODE = 1;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        request_text = (TextView)this.findViewById(R.id.request_text);
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent(Main.this,SecondActivity.class);
				i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
				startActivityForResult(i, FIRST_REQUEST_CODE);
			}
		});
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
    	if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
    		if(data != null) {
    			request_text.setText(data.getStringExtra("request_text_for_third"));
    		}
    	}
    }
}


public class SecondActivity extends Activity{

	private TextView request_text;
	private Button btn;
	private final int SECOND_REQUEST_CODE = 2;
	private String text;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        
        request_text = (TextView)this.findViewById(R.id.request_text);
        
        if (getIntent().getStringExtra("request_text_for_main") != null) {
        	text = getIntent().getStringExtra("request_text_for_main");
        	request_text.setText(text);
        }
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent(SecondActivity.this,ThirdActivity.class);
				i.putExtra("request_text_for_second", text+"\n"+"从SecondActivity传递到ThirdActivity");
				startActivityForResult(i, SECOND_REQUEST_CODE);
			}
		});
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {		
		super.onActivityResult(requestCode, resultCode, data);		
		if(requestCode==SECOND_REQUEST_CODE && data != null){
			setResult(Activity.RESULT_FIRST_USER, data);
			finish();
		}
	}
}



public class ThirdActivity extends Activity{

	private TextView request_text;
	private Button btn;
	private String text;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.third);
        
        text = getIntent().getStringExtra("request_text_for_second");
        request_text = (TextView)this.findViewById(R.id.request_text);
        request_text.setText(text);
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent();
				i.putExtra("request_text_for_third", text+"\n"+"从ThirdActivity再次传递到Main");
				setResult(Activity.RESULT_FIRST_USER, i);
				finish();
			}
		});
	}
	
}










这个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实现的。
代码如下:
public class Main extends Activity {
	private Button btn;
	private TextView request_text;
	private final int FIRST_REQUEST_CODE = 1;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        request_text = (TextView)this.findViewById(R.id.request_text);
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent(Main.this,SecondActivity.class);
				i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
				startActivityForResult(i, FIRST_REQUEST_CODE);
			}
		});
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
    	if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
    		if(data != null) {
    			request_text.setText(data.getStringExtra("final_request"));
    		}
    	}
    }
}


public class SecondActivity extends Activity{

	private TextView request_text;
	private Button btn,finalBtn;
	private final int SECOND_REQUEST_CODE = 2;
	private String text;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        
        request_text = (TextView)this.findViewById(R.id.request_text);
        
        if (getIntent().getStringExtra("request_text_for_main") != null) {
        	text = getIntent().getStringExtra("request_text_for_main");
        	request_text.setText(text);
        }
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent(SecondActivity.this,ThirdActivity.class);
				i.putExtra("request_text_for_second", text+"\n"+"从SecondActivity传递到ThirdActivity");
				startActivityForResult(i, SECOND_REQUEST_CODE);
			}
		});
        
        finalBtn = (Button)this.findViewById(R.id.finalBtn);
        finalBtn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent();
				i.putExtra("final_request", text+"\n"+"从SecondActivity最后传递到Main");
				setResult(Activity.RESULT_FIRST_USER,i);
				finish();
			}
		});
	}
	
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
    	if(requestCode==SECOND_REQUEST_CODE && resultCode==Activity.RESULT_OK){
    		if(data != null) {
    			text = data.getStringExtra("request_text_for_third");
    			request_text.setText(text);
    		}
    	}
    }
}


public class ThirdActivity extends Activity{

	private TextView request_text;
	private Button btn;
	private String text;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.third);
        
        text = getIntent().getStringExtra("request_text_for_second");
        request_text = (TextView)this.findViewById(R.id.request_text);
        request_text.setText(text);
        
        btn = (Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent i = new Intent();
				i.putExtra("request_text_for_third", text+"\n"+"从ThirdActivity再次传递到SecondActivity");
				setResult(Activity.RESULT_OK, i);
				finish();
			}
		});
	}
}













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





  • 大小: 7.5 KB
  • 大小: 11.5 KB
  • 大小: 11 KB
  • 大小: 7.8 KB
  • 大小: 11.5 KB
  • 大小: 12.4 KB
  • 大小: 12.5 KB
  • 大小: 7.8 KB
  • 大小: 14.3 KB
  • 大小: 12.2 KB
  • 大小: 15.8 KB
  • 大小: 13.2 KB
4
0
分享到:
评论
1 楼 蓝月儿 2011-03-17  
谢谢分享 转向的好多 呵呵 值得学习

相关推荐

    android:多个Activity跳转的小结

    在android开发中Activity相当于web开发的页面,或者说如j2ee开发中对应的jsp页面。在开发jsp时,经常会遇到页面跳转的问题,在android也同样会遇到。以下的几个例子是我对android的Activity跳转的小结。

    3个Activity跳转和数据传输

    多个Activity跳转的小结,A跳转到B,B跳转到C,C跳转到B,B跳转到A,并且相互之间传递数据。

    Android代码-android-UCToast

    廖祜秋liaohuqiu_秋百万 的 Android 悬浮窗的小结 睡不着起不来的万先生 的 Android悬浮窗使用TYPE_TOAST的小结 睡不着起不来的万先生 的 Android无需权限显示悬浮窗, 兼谈逆向分析app 文中提到,type 为 ...

    android开发入门教程

    11.2.3 华丽转身——实现多页面跳转 11.2.4 始终为用户做好服务——增加Service 11.2.5 细节决定成败——完善应用细节 11.3 成功就在眼前——应用测试和发布 11.3.1只欠东风——应用测试 11.3.2 可以赚钱了——发布...

    Android开发案例驱动教程 配套代码

    9.3.1 多个Activity之间数据传递 189 9.3.2 跳转与返回 192 9.3.3 任务与标志 196 9.4 Android系统内置Intent 199 本章小结 201 第10章 数据存储 203 10.1 健康助手案例 203 10.2 Android数据存储概述 205 ...

    android开发入门与实战(下)

    1.6 本章小结 第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    2.4 本章小结 15 第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18...

    android开发入门与实战(上)

    1.6 本章小结 第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、...

    《Google Android开发入门与实战》.pdf

    1.6 本章小结 6 第2章 工欲善其事 必先利其器——搭建android开发环境 7 2.1 开发android应用前的准备 7 2.1.1 android开发系统要求 7 2.1.2 android软件开发包 7 .2.1.3 其他注意事项 8 2.2 ...

    Google Android开发入门与实战的代码

    1.6 本章小结 6 第2章 工欲善其事 必先利其器——搭建Android开发环境 7 2.1 开发Android应用前的准备 7 2.1.1 Android开发系统要求 7 2.1.2 Android软件开发包 7 .2.1.3 其他注意事项 8 2.2 ...

    Google.Android开发入门与实战

    1.6 本章小结 第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、...

Global site tag (gtag.js) - Google Analytics