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 } }
-
- 使用
本文详细介绍了在Android开发中如何实现页面跳转及数据传递,包括在AndroidManifest.xml中注册页面的方法,使用Intent与Bundle进行数据序列化传递的过程,以及如何在目标页面接收并处理这些数据。
1331

被折叠的 条评论
为什么被折叠?



