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
                }
            }
        

猜你喜欢

转载自blog.csdn.net/lllllyt/article/details/83097157