新建一个新的工程,新建号Maintivity
实现一个Activity跳转到另一个Activity的关键是先声明好一个新的Activity后,必须在AndroidMainfest上注册对应的Activity,之后我们还得给新的Activity添加一个新的资源文件,跳转Activity我们通过传入Intent来激活Activity
本例新建一个Next.java的Activity,在新建一个新类的情况下我们可以
当然我们在这里选择SuperClass填写的Activity,并且在onCreate方法中一定要通过setContentView(方法来声明当前Activity来显示的资源文件)
public class Next extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_next); } }
在这里我们给Activity添加一个资源文件,actity_next.xml的资源文件,这里我们只是给资源文件添加一个简单的进度条来作为显示
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
当然在MainActivity中的资源视图activity_main.xml中添加一个button控件来实现视图的跳转
在button中我们通过给button添加事件来跳转
public class MainActivity extends Activity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)this.findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(MainActivity.this,Next.class); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
通过不同的Intent构造函数来传递启动Activity
Intent intent=new Intent("com.example.android.actitys.nextactivity");
通过这种方式传递构造函数的情况下必须给AndroidMainfest注册的Activity注册Intend-filter中注册action和category
<activity android:name=".Next"> <intent-filter > <action android:name="com.example.android.actitys.nextactivity"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> </activity>
Intent intent=new Intent("com.example.android.actitys.nextactivity"); startActivity(intent);
主要是通过Intent之间携带值intent.putExtra()方法
intent.putExtra("age", "12"); intent.putExtra("name", "billy"); Bundle bundle=new Bundle(); bundle.putString("code", "1120"); intent.putExtra("bundle", bundle);
setContentView(R.layout.activity_next); Intent intent=getIntent(); String name=intent.getStringExtra("name"); System.out.println("--name->>"+name); String age=intent.getStringExtra("age"); System.out.println("--age->>"+age); Bundle bundle=intent.getBundleExtra("bundle"); String code=bundle.getString("code"); System.out.println("--code->>"+code); textView=(TextView)this.findViewById(R.id.textView1); textView.setText(name);
想要在通过子窗体回传值,我们需要在父窗体中通过startActivityForResult(intent, requestCode)启动Activity,还要重写一个方法onActivityResult
自定义requestcode和resultcode来定义父子窗体来回传
startActivityForResult(intent, 1000);
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(requestCode==1000&&resultCode==1001){ String result=data.getStringExtra("jiegou"); editText3.setText(result); } }
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub String jiegouString=editText.getText().toString().trim(); Intent intent1=new Intent(); intent1.putExtra("jiegou", jiegouString); setResult(1001, intent1); finish();//结束Activity的生命周期 } });
通过onSaveInstanceState来保存状态