个人解读Activity之三
这一节,我们讨论启动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.易做图_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.易做图_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.zzzyk.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);
补充:移动开发 , Android ,