(一)Activity參數傳遞,activity參數傳遞

來源:互聯網
上載者:User

(一)Activity參數傳遞,activity參數傳遞

1.主Activity,用於啟動另一個Activity()
public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");

findViewById(R.id.btnStartBAct).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,BActivity.class);
intent.putExtra("data","Hello Henry"); //進行參數傳遞
//startActivity(new Intent(MainActivity.this,BActivity.class));
startActivity(intent);
}
});
}

@Override
protected void onStart()
{
super.onStart();
System.out.println("onStrart");
}
@Override
protected void onRestart()
{
super.onRestart();
System.out.println("onRestart");
}
@Override
protected void onStop()
{
super.onStart();
System.out.println("onStop");
}
@Override
protected void onResume()
{
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause()
{
super.onPause();
System.out.println("onPause");
}
@Override
protected void onDestroy()
{
super.onDestroy();
System.out.println("onDestroy");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}
2.從Activity 被MainActivity啟動
public class BActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
System.out.println("B onCreate");

Intent intent=getIntent(); //擷取MainActivity傳遞過來的Intent

TextView tv= (TextView) findViewById(R.id.tv);
tv.setText(intent.getStringExtra("data")); //調用Intent的getStringExtra("data")方法取出資料
    }

@Override
protected void onStart()
{
super.onStart();
System.out.println("B onStrart");
}
@Override
protected void onRestart()
{
super.onRestart();
System.out.println("B onRestart");
}
@Override
protected void onStop()
{
super.onStart();
System.out.println("B onStop");
}
@Override
protected void onResume()
{
super.onResume();
System.out.println("B onResume");
}
@Override
protected void onPause()
{
super.onPause();
System.out.println("B onPause");
}
@Override
protected void onDestroy()
{
super.onDestroy();
System.out.println("B onDestroy");
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_b, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}
3.傳遞資料包Bundle
3.1 MainActivity中的

findViewById(R.id.btnStartBAct).setOnClickListener(new View.OnClickListener() {
        @Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,BActivity.class);
//intent.putExtra("data","Hello Henry");

//傳遞資料包
Bundle bundle=new Bundle();
bundle.putString("name","henry"); //往資料包中添加資料
bundle.putInt("age",24);
intent.putExtras(bundle); //將資料包添加到Intent中

//startActivity(new Intent(MainActivity.this,BActivity.class));
startActivity(intent);
}
});
}
3.2 BActivity中的
Intent intent=getIntent();
Bundle bundle=intent.getExtras(); //接收資料包

TextView tv= (TextView) findViewById(R.id.tv);
//tv.setText(intent.getStringExtra("data"));
tv.setText(String.format("name=%s,age=%d",bundle.getString("name"),(int)bundle.get("age"))); //調用Bundle的getXXX()函數擷取資料
4.傳遞引用
4.1使用序列化的方式傳遞引用類
自訂類:
public class User implements Serializable {        //使用java提供的序列化的方式   
private String name;
private int age;

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public int getAge() {
return age;
}
public User(String name,int age)
{
this.name=name;
this.age=age;
}
}
主Activity:
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.btnStartBAct).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,BActivity.class);


intent.putExtra("user", (Serializable) new User("henryQL",24)); //添加自訂的引用類的對象
startActivity(intent);
}
});
}

}
被調用的Activity:
public class BActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);

Intent intent=getIntent();
User user= (User) intent.getSerializableExtra("user"); //擷取序列化的資料

TextView tv= (TextView) findViewById(R.id.tv);
tv.setText(String.format("nmae=%s,age=%d",user.getName(),user.getAge()));
}
}
4.2 使用Android提供的Parcelable介面
public class User implements Parcelable {
private String name;
private int age;

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public int getAge() {
return age;
}
public User(String name,int age)
{
this.name=name;
this.age=age;
}


@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(getName());
parcel.writeInt(getAge());
}

public static final Parcelable.Creator<User> CREATOR=new Parcelable.Creator<User>() //必須命名為CREATOR
{

@Override
public User createFromParcel(Parcel parcel) {
return new User(parcel.readString(),parcel.readInt());
}

@Override
public User[] newArray(int i) {
return new User[i];
}
};
}

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");

findViewById(R.id.btnStartBAct).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,BActivity.class);

intent.putExtra("user",new User("Qianlong",24));

//startActivity(new Intent(MainActivity.this,BActivity.class));
startActivity(intent);
}
});
}
}

public class BActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
System.out.println("B onCreate");


Intent intent=getIntent();
User user=intent.getParcelableExtra("user"); //擷取Parcelable對象

TextView tv= (TextView) findViewById(R.id.tv);
//tv.setText(intent.getStringExtra("data"));
//tv.setText(String.format("name=%s,age=%d",bundle.getString("name"),(int)bundle.get("age")));
tv.setText(String.format("nmae=%s,age=%d",user.getName(),user.getAge()));
}
}
 




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.