1. 程式人生 > >Android開發 - 頁面跳轉以及資料傳遞

Android開發 - 頁面跳轉以及資料傳遞

Android開發 - 頁面跳轉以及資料傳遞

教程:

  • 頁面需要先在AndroidManifest.xml中註冊,否則會造成閃退
        activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <
    category
    android:name="android.intent.category.LAUNCHER" />
    </intent-filter> </activity> <activity android:name=".DetailActivity"> </activity>
  • 頁面跳轉以及傳遞資料詳述
    • 使用startActivityForResult方法。然後利用onActivityResult方法處理返回的結果
    • 跳轉需要傳遞資訊使用到Intend機制,將需要被傳遞的物件序列化以後放在Buddle中儲存
    • 簡單例子
      • 對應activity_main頁面的類

        public class MainActivity extends AppCompatActivity {
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                // do something
            }
        }
        
      • 對應detail頁面的類

        public class DetailActivity extends AppCompatActivity {
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.detail);
                
                // do something
            }
        }
        
      • MainActivity.java所繫結的activity_main頁面跳轉到DetailActivity所繫結的detail頁面

        Intent myIntent = new Intent(MainActivity.this, DetailActivity.class);
        // 例項化一個Bundle
        Bundle myBundle = new Bundle();
        // 把item資料放入到bundle中
        myBundle.putSerializable("item", data.get(position));
        //把bundle放入intent裡
        myIntent.putExtra("Message", myBundle);
        startActivityForResult(myIntent, 0);
        
      • DetailActivity接受處理傳遞過來的資訊

        // 獲取資料
        final Intent myIntend = getIntent();
        //從intent取出bundle
        Bundle myBundle = myIntend.getBundleExtra("Message");
        // 獲取bundle中資料
        final Collection clickedItem = (Collection) myBundle.getSerializable("item");
        
      • DetailActivity所繫結的頁面返回到MainActivity所繫結的頁面,同時傳遞一些資訊,需要呼叫的setResult方法進行資料傳遞,finish方法結束頁面

        //資料是使用Intent返回
        Intent intent = new Intent(DetailActivity.this, MainActivity.class);
        //把返回資料存入Bundle
        Bundle bundle = new Bundle();
        bundle.putSerializable("item", clickedItem);
        intent.putExtra("Message", bundle);
        //設定返回資料
        setResult(RESULT_OK, intent);
        // 關閉頁面
        finish();
        
      • MainActivity使用onActivityResult進行回撥, 為了得到傳回的資料,必須在MainActivity類重寫onActivityResult方法

            /**
            * requestCode 請求碼,即呼叫startActivityForResult()傳遞過去的值
            * resultCode 結果碼,結果碼用於標識返回資料來自哪個新Activity
            * data 為返回的intent
            */
            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        
                // 得到返回的資料
                if(resultCode == RESULT_OK) {
                    //從intent取出bundle
                    Bundle myBundle = data.getBundleExtra("Message");
                    // 獲取bundle中資料
                    Collection clickedItem = (Collection) myBundle.getSerializable("item");
        
                	// do something
                }
            }