在启动另外一个Activity的时候,有两种方法,一种是直接使用startActivity,另外一种就是使用startActivityForResult。前一种想必大家都明白怎么使用了,我就不废话了。本文主要通过一个Demo来学习一下第二种
startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法,所以我们可以重写一下这个方法。直接看代码吧:
MainActivity.java
package com.yunzhu.teststartactivityforresult;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity implements View.OnClickListener{
private static int REQUSETET_CODE1=0;
private static int REQUSETET_CODE2=2;
private TextView t1,t2;
private Button b1,b2;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
intent=new Intent();
intent.setClass(MainActivity.this,result.class);
}
public void initview(){
t1=(TextView)this.findViewById(R.id.textview1);
t2=(TextView)this.findViewById(R.id.textview2);
b1=(Button)this.findViewById(R.id.b1);
b2=(Button)this.findViewById(R.id.b2);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.b1:
startActivityForResult(intent,REQUSETET_CODE1);
break;
case R.id.b2:
startActivityForResult(intent,REQUSETET_CODE2);
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String one=data.getStringExtra("one");
String two=data.getStringExtra("two");
if(resultCode==23){
switch (requestCode){
case 0:
t1.setText(one);
break;
case 2:
t2.setText(two);
default:
break;
}
}
}
}
result.java
package com.yunzhu.teststartactivityforresult;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
/**
* Created by yu on 2015/8/13.
*/
public class result extends ActionBarActivity{
private static int resultCode=23;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
Intent intent=new Intent();
intent.putExtra("one","1000");
intent.putExtra("two", "20000");
setResult(resultCode, intent);
finish();
}
}
界面布局很简单,这里就不给出啦。