展会信息港展会大全

个人解读Activity之三
来源:互联网   发布日期:2016-01-14 10:59:04   浏览:2157次  

导读:这一节,我们讨论启动Activities并获取结果这个议题。不知道大家还记不记得,在上一节中我们已经实现了在一个Activity中启动另一个Activity,但是仅仅是调用了startAc...

这一节,我们讨论启动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);

}

}

/** 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)

{ www.2cto.com

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"));

}

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

}

}

}

摘自 chenlong12580的专栏

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港