1.需求
1.1 从MainActivity启动T2Activity,并希望T2Activity为MainActivity返回数据,而不需要再一次使用startActivity()
2.实现
….在这个例子里面,在T2Activity中点击按钮调用finish都会回到MainActivity,但是通过startActivity启动的并不会返回数据,回到MainActivity只是因为T2Activity被销毁了。而通过startActivityForResult有返回数据
2.1MainActivity.java
package com.example.lab8;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView showResultFormT2;
Button startBtn;
Button waitBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWidget();
addListener();
}
//获得组件
protected void getWidget() {
this.showResultFormT2 = (TextView)findViewById(R.id.text);
this.startBtn = (Button)findViewById(R.id.start_btn);
this.waitBtn = (Button)findViewById(R.id.wait_btn);
}
//为组件添加监听事件
protected void addListener() {
startBtn.setOnClickListener(startT2);
waitBtn.setOnClickListener(startT2ForReslut);
}
//startActivity启动()
public Button.OnClickListener startT2 = new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,T2Activity.class);
MainActivity.this.startActivity(intent);
}
};
//startActivityForResult启动()
public Button.OnClickListener startT2ForReslut = new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,T2Activity.class);
int requestCode = 110;
//这里注意使用MainActivity.this.startActivityForResult()而不是直接startActivityForResult(),因为在这里this = view 下面也一样
MainActivity.this.startActivityForResult(intent, requestCode);
}
};
//接受返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (resultCode) {
case RESULT_OK:
String result = data.getStringExtra("mes");
showResultFormT2.setText(result);
break;
default:
break;
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
2.2T2Activity.java
package com.example.lab8;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class T2Activity extends Activity {
EditText edit;
Button finish;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.t2activity_layout);
edit = (EditText)findViewById(R.id.edit);
finish = (Button)findViewById(R.id.finish);
finish.setOnClickListener(finishT2);
}
public Button.OnClickListener finishT2 = new Button.OnClickListener()
{
@Override
public void onClick(View v) {
String result = edit.getText().toString();
if((result.trim()).equals(""))
Toast.makeText(T2Activity.this, "请先输入" ,Toast.LENGTH_LONG).show();
else
{
Intent intent = new Intent();
intent.putExtra("mes", result);
T2Activity.this.setResult(RESULT_OK,intent);
T2Activity.this.finish();
}
};
};
}
//几个Activity中内置的resultCode 自定义时不要冲突
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;