`
fengzhizi715
  • 浏览: 161628 次
  • 性别: 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跳转的小结。

    智能家居系统 Intent与Activity-教案.doc

    在智能家居系统的应用中,每个不同的功能模块,如设置、监控、控制等,都可以由一个或多个Activity来实现。Activity可以通过Intent来启动或关闭,形成应用程序中的界面导航。 3. **利用Intent实现界面跳转**: 要...

    android Activity 详解

    一个应用程序通常包含多个Activity,它们通过特定的方式进行通信和交互。 #### Activity简介 每个Activity代表了一个单独的屏幕,在Android中,Activity是一个生命周期明确的对象,可以通过回调方法来跟踪它的状态...

    Android实现WebView点击拦截跳转原生

    它提供了多个方法,例如 onPageStarted、onPageFinished、shouldOverrideUrlLoading 等。通过重写这些方法,可以对 WebView 中的事件进行处理。 shouldOverrideUrlLoading 方法 shouldOverrideUrlLoading 方法是 ...

    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响应事件onClick方法的五种实现方式小结

    Android 响应 onClick 事件的五种实现方式小结 Android 响应 onClick 事件是 Android 开发中非常重要的一个环节,对于按钮、文本框、列表项等控件的点击事件处理都是通过 onClick 事件来实现的。下面将为您介绍 ...

    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+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...

    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、...

    Android实验报告.docx编程资料

    #### 四、小结 通过本次实验,我们不仅了解了如何设计和实现登录与注册页面,还学习了如何通过Intent实现Activity之间的跳转,以及如何使用SharedPreferences存储用户信息。这对于Android应用的开发来说是非常基础...

    课设校园新闻管理.zip

    【标题】"课设校园新闻...综上所述,这个“课设校园新闻管理”项目涵盖了Android应用开发的多个重要方面,无论是对于个人学习还是团队合作,都是一个很好的实践平台,有助于提升开发者对Android系统的理解和编程技能。

Global site tag (gtag.js) - Google Analytics