您好,登錄后才能下訂單哦!
在Android中,活動是一個界面,當需要在界面之間相互切換的時候,需要用到Intent(意圖)進行消息傳遞。使用startActivity(Intent)函數啟動另一個活動。
Bundle是一個key-Value類,可以用他攜帶信息。
Bundle.putString("key","String")方法和Bundle.getString("key")方法放入與取出信息。
可以將信息放入到Intent中,使用方法Intent.putExtras(bundle)方法和Intent.getExtras();方法將信息放入和取出。
示例工程:兩個.java,MainActivity,java中輸入字符串,點擊按鍵,啟動NewActivity,java,并將字符串顯示出來。
詳細代碼如下:
MainActivity.java:
import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.os.Build; public class MainActivity extends Activity { EditText edittext; TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button botton1=(Button)this.findViewById(R.id.btn1); edittext=(EditText)this.findViewById(R.id.edit); textview=(TextView)this.findViewById(R.id.mytext1); botton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(MainActivity.this,NewActivity.class); Bundle bundle=new Bundle(); bundle.putString("name", edittext.getText().toString()); intent.putExtras(bundle); startActivity(intent); } }); } }
NewActivity.java:
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; import android.widget.TextView; public class NewActivity extends Activity { TextView textview; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new); Button botton1=(Button)this.findViewById(R.id.btn2); textview=(TextView)this.findViewById(R.id.mytext3); Intent intent=getIntent(); Bundle bundle=intent.getExtras(); textview.setText(bundle.getString("name")); botton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub startActivity(new Intent(NewActivity.this,MainActivity.class)); } }); } }
activity_main:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/mytext1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="mainactivity"/> <EditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=""/> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="tonew"/> </LinearLayout>
activity_new:
<?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" > <TextView android:id="@+id/mytext2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="newactivity"/> <TextView android:id="@+id/mytext3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=""/> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="tomain"/> </LinearLayout>
效果如下:
啟動Activity并返回結果
有時候我們學院啟動一個Activity并返回其結果,這是我們應該使用方法:
startActivityForResult(Intent intent,int requestCode);
通過重寫onActivityResult()對返回的參數進行處理,函數原型為:
protected void onActivityResult(int requestCode,int resultCode,Intent data) // 請求碼與結果碼
使用函數NewActivity.this.setResult(0,intent)和NewActivity.this.finish()設置返回參數
以上一個工程為基礎,添加代碼。使NewActivity.java中按鍵返回字符串,然后在MainActivity中把該字符串顯示出來。
代碼如下:
MainActivity
public class MainActivity extends Activity { EditText edittext; TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button botton1=(Button)this.findViewById(R.id.btn1); edittext=(EditText)this.findViewById(R.id.edit); textview=(TextView)this.findViewById(R.id.mytext1); botton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(MainActivity.this,NewActivity.class); Bundle bundle=new Bundle(); bundle.putString("name", edittext.getText().toString()); intent.putExtras(bundle); startActivityForResult(intent,0); } }); } protected void onActivityResult(int requestCode,int resultCode,Intent data) { Bundle bundle=data.getExtras(); textview.setText(bundle.getString("name")); } }
NewActivity:
public class NewActivity extends Activity { private TextView textview; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new); Button botton1=(Button)this.findViewById(R.id.btn2); textview=(TextView)this.findViewById(R.id.mytext3); Intent intent=getIntent(); Bundle bundle=intent.getExtras(); textview.setText(bundle.getString("name")); botton1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(); Bundle bundle=new Bundle(); bundle.putString("name", "I'm from New"); intent.putExtras(bundle); NewActivity.this.setResult(0,intent); NewActivity.this.finish(); } }); } }
效果如下:
請求碼與結果碼
請求碼:當不同業務打開同一個Activity時,用請求碼判斷是那個業務發出的打開請求。
例如當一個MainActivity中兩個button都打開Activity1時,可以設置不同的請求碼,然后在Activity1中可根據不同請求碼判斷是button1還是button2打開的Activity1。
結果碼:當同一個業務打開多個Activity時,用結果碼判斷是那個Activity返回的參數。
例如當MainActivity中button同時打開Activity1,Activity2,Activity3,可以在三個Activity中設置不同的結果碼,然后在MainActivity中的方法onActivityResult中根據結果碼判斷次結果是那個Activity返回的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。