1. Android页面间数据传递方式(1)。
使用Intent对象实现数据的传递。
Intent intent=new Intent(); intent.setClass(ParentPage.this, ChildPage.class); intent.putExtra("id", "this is a test"); startActivity(intent); |
2. Android页面间数据传递方式(2)。
通过Intent对象获取bundle,然后进行数据的传递。
Intent intent=new Intent(); intent.setClass(ParentPage.this, ChildPage.class); Bundle bundle = new Bundle(); bundle.putString("id", "this is a test"); intent.putExtras(bundle); startActivity(intent); |
3. Android页面间数据传递方式(3)。
使用SharedPreferences对象实现数据的传递。
sharePreferences的理解:
SharedPreferences对象,这是在多个Activity(同一包中)共享数据的方式,本质上它就是一个可以在包的范围内进行数据共享的文件。 |
参考代码:
SharedPreferences per=getSharedPreferences("Text", 0); Editor editor=per.edit(); editor.putString("text", txt.getText().toString()); |
4. Android页面间实现返回的效果。
这个在项目中是很常见的,解决这个问题就要了解activity的生命周期了。
(1) Activity生命周期。
我们写了两个activity(FirstActivity和SecondActivity)。
FirstActivity代码:
package mars.activity04; 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;
public class FirstActivity extends Activity { private Button myButton; public void onCreate(Bundle savedInstanceState) { System.out.println("FirstAcvity ---> onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton = (Button)findViewById(R.id.myButton); myButton.setText("启动第二个Activity"); myButton.setOnClickListener(new ButtonOnClickListener()); } protected void onDestroy() { System.out.println("FirstAcvity --->onDestory"); super.onDestroy(); } protected void onPause() { System.out.println("FirstAcvity --->onPause"); super.onPause(); } protected void onRestart() { System.out.println("FirstAcvity --->onRestart"); super.onRestart(); } protected void onResume() { System.out.println("FirstAcvity --->onResume"); super.onResume(); } protected void onStart() { System.out.println("FirstAcvity --->onStart"); super.onStart(); } protected void onStop() { System.out.println("FirstAcvity --->onStop"); super.onStop(); } class ButtonOnClickListener implements OnClickListener{ public void onClick(View v) { Intent intent = new Intent(); intent.setClass(FirstActivity.this,SecondActivity.class); FirstActivity.this.startActivity(intent); } } } |
SecondActivity代码:
package mars.activity04; 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; public class SecondActivity extends Activity { private Button secondButton; protected void onCreate(Bundle savedInstanceState) { System.out.println("SecondActivity--->onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.second); secondButton = (Button)findViewById(R.id.secondButton); secondButton.setOnClickListener(new ButtonOnClickListener()); } protected void onDestroy() { System.out.println("SecondActivity--->onDestory"); super.onDestroy(); } 。。。。。。。不重复使用了。 class ButtonOnClickListener implements OnClickListener{ public void onClick(View v) { Intent intent = new Intent(); intent.setClass(SecondActivity.this,FirstActivity.class); SecondActivity.this.startActivity(intent); } } } |
这两个activity重新写了onCreate()、onDestroy()、onPause()、onRestart()、onResume()、onStart()、onStop()方法,每个方法只打印了一句话。
在日志过滤器中我们可以看到这些方法执行的顺序:
对应的activity界面:
接下来我们点击按钮:
日志文件:
由此我们可以看出,activity的生命周期是:先调用onCreate()-----onStart()-----onResume(),当页面要跳转的时候,先执行onPause(),等到SecondActivity的onCreate()-----onStart()------onResume()执行完毕后,FirstActivity才会执行onStop()方法。
SecondActivity页面。
当我们点击按钮时log文件显示:
调用的方法的顺序和上面有个地方不一样,由于栈内存中已经存在FristActivity了。这次调用的方法是onRestart()方法。
重点:虽然secondActivity执行了onStop()方法,但是并不知将这个activity重栈内存中删除了,知识不可见了。只有当执行了finish()方法,从栈内存中销毁掉。
5. Android实现对象的传递。
实现对象的传递可以使用两种方法实现。
(1) 使用Bundle的putSerializable实现对象传递.
(2) 使用Bundle的putParacelable实现对象传递。