Survey:Android程式設計(十二) Activity互動作業-2
本來想寫在 [Android]小練習及觀念釐清之class間互相呼叫 裡面
但遇到蠻多狀況的,所以想獨立出來寫一篇
今天嘗試寫一個Activity 呼叫Activity的專案,專案名稱act2act
主程式:
public class MainActivity extends Activity {
private Button bt1;
private TextView tv1;
private EditText et1;
public String ma1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = (Button)this.findViewById(R.id.bt1);
tv1 = (TextView)this.findViewById(R.id.tv1);
et1 = (EditText)this.findViewById(R.id.et1);
bt1.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
//取得et1得到的字串並轉成String assign到ma1
ma1 = et1.getText().toString();
//new一個intent物件
Intent intent = new Intent();
//設定intent物件來源跟目的
intent.setClass(MainActivity.this,ma2.class);
//new一個bundle
Bundle bundle = new Bundle();
//把資料丟進bundle
bundle.putString("number",ma1);
//把bundle丟進intent裡面,像盒中盒的概念
intent.putExtras(bundle);
//startActivity
startActivity(intent);
這行待會探討
//intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}});
}}
主程式2:
public class ma2 extends Activity {
private Button bt2;
private TextView tv2;
private EditText et2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.ma2);
//設定ma2專屬的TexTView
tv2 = (TextView)findViewById(R.id.tv2);
//設定要接收的intent
Intent intent= this.getIntent();
//設定要接收的bundle
Bundle bundle=intent.getExtras();
//將接收的bundle擷取裡面的String number裡的值
final String gstring = bundle.getString("number");
//設定顯示在tv2上
tv2.setText(gstring);
兩個layout就不多說了
setContentView記得設成指定的layout
AndroidManifest.xml:
若沒有註冊另一個Activity在AndroidManifest.xml的話在執行專案時會出現:
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.kh.act2act/com.kh.act2act.ma2}; have you declared this activity in your AndroidManifest.xml?
記得註冊,反而是主程式一的最後一行,因為卡住的因素 上網找了一下解決方案有看到這個描述:
我想要呼叫一個PreferenceActivity,使用了下列方式
Intent i = new Intent(MyPreferenceActivity.this, Settings.class);startActivity(i);
但卻出現了異常終止,查了一下log,得到錯誤資訊如下:Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?然後Goolge了一下都知道,Context中有一個startActivity方法,Activity繼承自Context,重載了startActivity方法。如果使用Activity的startActivity方法,不會有任何限制,而如果使用Context的startActivity方法的話,就需要開啟一個新的task,遇到上面那個異常的,都是因為使用了Context的startActivity方法。解決辦法是,加一個flag。所以只要再加上一個flag就行了i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
試試看註解掉,結果還是正常 但AndroidManifest.xml的註冊一拿掉 問題還是出現
所以結論是可以不用註冊flag 但一定要加AndroidManifest.xml的註冊
收工!
沒有留言:
張貼留言