Android开发 - 页面跳转和数据传递
- 记录代码详情参阅Project-FoodList
- Project-FoodList的数据传递已使用Eventbus,
onActivityResult
方法被弃用(注释中可以找到)。
教程:
- 页面需要先在
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 } }
-
- 使用