个人解读Activity之三

本文介绍如何在Android应用中从一个Activity启动另一个Activity,并在两者间传递数据。演示了一个简单的例子,展示了如何设置监听器以在点击列表项时启动新的Activity,并展示所选项目的详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一节,我们讨论启动Activities并获取结果这个议题。不知道大家还记不记得,在上一节中我们已经实现了在一个Activity中启动另一个Activity,但是仅仅是调用了startActivity()这个方法来启动,之后就没管了,但是我们试想一下,假如你要从一个电话簿中选取一个联系人记录,然后在创建一个新的Activity来显示这个记录的详细信息,这就涉及到第二个Activity必须知道用户再第一个Activity中选中了哪一条记录,这就涉及到了两个Activities之间传递数据,像这种情况是时常遇到的!
我们这里也用一个例子来实现我们的设想:在第一个Activity上面显示一个列表视图,显示几条记录!然后为每个条目设置监听器,但单击任何条目时候,在第二个Activity上面显示我们之前选中条目的详细信息!
第一步:新建一个工程:ActivityRes;
第二步:修改ActivityRes.java文件,如下所示:
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); String[] str = {"WuHan", "QingDao", "YuCi"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str); setListAdapter(adapter); } @Override protected void onListItemClick (ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); switch(position) { case 0: Bundle bundle = new Bundle(); bundle.putString("name", "WuHan"); bundle.putString("school", "XXX"); bundle.putString("student", "XXX"); Intent intent = new Intent(ResultActivity.this, SecondActivity.class); intent.putExtras(bundle); startActivity(intent); } } 第三步:创建第二个activity:SecondActivity,代码如下:
private TextView TextView01; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView01 = (TextView)findViewById(R.id.TextView01); Intent intent = this.getIntent(); Bundle bundle = intent.getExtras(); TextView01.setText(bundle.getString("name")+":"+bundle.getString("school")+":"+bundle.getString("student")); } 第四步:运行应用程序,可以看到如下结果:
以上是两个Activity之间的数据传输,再来看看关于获取结果!
有的时候,可能需要从启动的activity中获取一个结果。在这种情况下,我们应该调用startActivityForResult方法来启动activity而不是之前使用的startActivity()方法。为了从随后启动的Activity中获取到结果,我们必须完成onActivityResult()这个回调函数。当指定的activity启动完成后,他将会通过一个Intent对象返回一个结果到onActivityResult()方法中。
例如:我们需要从联系人中获取一条记录,以至于我们可以对这条记录进行其他的一些操作,我们可以像下面这样创建一个返回结果的Intent并且处理这个返回的结果!
private void pickContact() { // Create an intent to "pick" a contact, as defined by the content provider URI Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // If the request went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform a query to the contact's content provider for the contact's name Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null); if (cursor.moveToFirst()) { // True if the cursor is not empty int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name = cursor.getString(columnIndex); // Do something with the selected contact's name... } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值