想了解android IPC的觀念的話,以下有一篇Run PC的文章不錯,請參考:
http://www.runpc.com.tw/content/content.aspx?id=105757
如果要在不同activity中傳遞像int、boolean、String...等資料型態的資料非常容易,使用類似下列語法即可
Intent it = new Intent();
it.putExtra("name","Peter");
it.putExtra("age",10);
不過如果希望把整個object物件丟給另一個Activity的話,官方說法則需要使用parcelable的觀念來達成。但是如果單純的是同一支apk內的Activity要傳遞的話,可以使用static的方式來辦到。這個方法並不正統,但是相當方便撰寫程式。
假設Activity1裡面有一個類別PassObj,我們希望把這個PassObj傳到Activity2,讓Activity2可以使用這個類別的變數和方法時,利用2個java檔舉例如下:
Activity1.java程式碼如下:
public class Activity1 extends Activity {
public static PassObj PassToActivity2;
public class PassObj{
private int value;
public void setValue10(){
value = 10;
}
public int getValue(){
return value;
}
public int getValueAdd10(){
value = value + 10;
return value;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PassToActivity2 = new PassObj();
PassToActivity2.setValue10();
Button btn = (Button) findViewById(R.id.btn1);
OnClickListener lis = new OnClickListener() {
public void onClick(View v) {
Intent it = new Intent();
it.setClass(Activity1.this, Activity2.class);
startActivity(it);
}
};
btn.setOnClickListener(lis);
String tempString;
tempString = Integer.toString(PassToActivity2.getValue());
TextView txt = (TextView) findViewById(R.id.txt1);
txt.setText(tempString);
}
}
Activity2.java程式碼如下:
public class Activity2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
String tempString;
tempString = Integer.toString(Activity1.PassToActivity2.getValue()) + "\n";
tempString = tempString + Integer.toString(Activity1.PassToActivity2.getValueAdd10());
TextView txt2 = (TextView) findViewById(R.id.txt2);
txt2.setText(tempString);
Button btn = (Button) findViewById(R.id.btn2);
OnClickListener lis = new OnClickListener() {
public void onClick(View v) {
Intent it = new Intent();
it.setClass(Activity2.this, Activity1.class);
startActivity(it);
}
};
btn.setOnClickListener(lis);
}
}
執行結果如下:
請注意的是,當Activity2返回Activity1的時候,再將value印出來,還是10,並不會因為在Activity2曾經增加value的值而改變。雖然在Activity2時value已經變成20,但是回到Activity1的時候,value還是10
http://www.runpc.com.tw/content/content.aspx?id=105757
如果要在不同activity中傳遞像int、boolean、String...等資料型態的資料非常容易,使用類似下列語法即可
Intent it = new Intent();
it.putExtra("name","Peter");
it.putExtra("age",10);
不過如果希望把整個object物件丟給另一個Activity的話,官方說法則需要使用parcelable的觀念來達成。但是如果單純的是同一支apk內的Activity要傳遞的話,可以使用static的方式來辦到。這個方法並不正統,但是相當方便撰寫程式。
假設Activity1裡面有一個類別PassObj,我們希望把這個PassObj傳到Activity2,讓Activity2可以使用這個類別的變數和方法時,利用2個java檔舉例如下:
Activity1.java程式碼如下:
public class Activity1 extends Activity {
public static PassObj PassToActivity2;
public class PassObj{
private int value;
public void setValue10(){
value = 10;
}
public int getValue(){
return value;
}
public int getValueAdd10(){
value = value + 10;
return value;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PassToActivity2 = new PassObj();
PassToActivity2.setValue10();
Button btn = (Button) findViewById(R.id.btn1);
OnClickListener lis = new OnClickListener() {
public void onClick(View v) {
Intent it = new Intent();
it.setClass(Activity1.this, Activity2.class);
startActivity(it);
}
};
btn.setOnClickListener(lis);
String tempString;
tempString = Integer.toString(PassToActivity2.getValue());
TextView txt = (TextView) findViewById(R.id.txt1);
txt.setText(tempString);
}
}
Activity2.java程式碼如下:
public class Activity2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
String tempString;
tempString = Integer.toString(Activity1.PassToActivity2.getValue()) + "\n";
tempString = tempString + Integer.toString(Activity1.PassToActivity2.getValueAdd10());
TextView txt2 = (TextView) findViewById(R.id.txt2);
txt2.setText(tempString);
Button btn = (Button) findViewById(R.id.btn2);
OnClickListener lis = new OnClickListener() {
public void onClick(View v) {
Intent it = new Intent();
it.setClass(Activity2.this, Activity1.class);
startActivity(it);
}
};
btn.setOnClickListener(lis);
}
}
執行結果如下:
一開始程式執行 |
值一開始是10,然後加到20 |
回到Activity1時,值依然是10 |
請注意的是,當Activity2返回Activity1的時候,再將value印出來,還是10,並不會因為在Activity2曾經增加value的值而改變。雖然在Activity2時value已經變成20,但是回到Activity1的時候,value還是10
"請注意的是,當Activity2返回Activity1的時候,再將value印出來,還是10,並不會因為在Activity2曾經增加value的值而改變。雖然在Activity2時value已經變成20,但是回到Activity1的時候,value還是10"
回覆刪除請問一下是宣告成static後返回都會是10嗎?