如何在两个 Activity 之间传递参数,但一个必须只支持第一个
How can I pass parameters between two Activity but one must only support the first one
我有一个activity,必须很快处理数据然后return到前面的activity,我举个例子:我有一个MainActivity class通过 Intent 将信息传递给另一个 Loader class,这会处理数据并将其发送回 MainActivity。我不知道如何把这个程序付诸实践...
借助 android startActivityForResult() 方法,您可以从另一个 activity.
获取结果
借助 android startActivityForResult() 方法,您可以将信息从一个 activity 发送到另一个 vice-versa。 android startActivityForResult 方法需要来自第二个 activity 的结果(要调用 activity)。
在这种情况下,我们需要覆盖在第二个 activity returns 结果时自动调用的 onActivityResult 方法。
MainActivity.java
public class MainActivity extends Activity {
TextView textView1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1=(TextView)findViewById(R.id.textView1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent, 2);// Activity is started with
requestCode 2
}
});
}
// Call Back method to get the Message form other Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if(requestCode==2)
{
String message=data.getStringExtra("MESSAGE");
textView1.setText(message);
}
}
SecondActivity.java
public class SecondActivity extends Activity {
EditText editText1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
editText1=(EditText)findViewById(R.id.editText1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String message=editText1.getText().toString();
Intent intent=new Intent();
intent.putExtra("MESSAGE",message);
setResult(Activity.RESULT_OK,intent);
finish();//finishing activity
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
}
//do Some work
Intent i = new Intent(this,MainActivity2..class);
startActivityForResult(i,12);
}
在MainActivity2.class
// after your work complete
Intent i =new Intent();
i.putExtra("result",true);// any data you want to pass
setResult(RESULT_OK,i);
在此之后我们处理结果
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch(requestCode){
case 12:
if(resultCode == Activity.RESULT_OK){// onsuccess do something
boolean isSucces = data.getBooleanExtra("result",false);
if(isSuccess)// perform action
{// show toast}
}
}
}
从您的 MainActivity 调用 TargetActivity 使用 startActivityForResult()-
例如:
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra(); // sent your putExtra data here to pass through intent
startActivityForResult(intent, 1000);
在您的意图中,将您想要 return 的数据设置回 MainActivity。如果您不想return返回任何数据,那么您不需要设置任何数据。
例如:
在TargetActivity中如果你想发回数据:
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK, returnIntent);
finish();
如果你不想return数据:
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
现在在您的 MainActivity class 中为 onActivityResult() 方法编写以下代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1000) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
// Do your task here.
}
}
}
我发现最好使用回调。
在装载机中:
创建内部 class
MyCallback callback;
viod setCallback(MyCallback callback){
this.callback = callback;
}
viod onStop(){
callback = null;
}
interface MyCallback{
void doSomething(Params params);
}
在主要活动中:
实施 MyCallback
在 onCreate
中设置引用
Loader loader = new Loader();
loader.setCallback(this);
override method doSomething()
@override
void doSomething(Params params){
//do your thing with the params…
}
当作业在 Loader 调用 MainActivity 中完成时:
callback.doSomething(params);
在 onStop() 中销毁 MainActivity 中的引用
loader.onStop();
我有一个activity,必须很快处理数据然后return到前面的activity,我举个例子:我有一个MainActivity class通过 Intent 将信息传递给另一个 Loader class,这会处理数据并将其发送回 MainActivity。我不知道如何把这个程序付诸实践...
借助 android startActivityForResult() 方法,您可以从另一个 activity.
获取结果借助 android startActivityForResult() 方法,您可以将信息从一个 activity 发送到另一个 vice-versa。 android startActivityForResult 方法需要来自第二个 activity 的结果(要调用 activity)。
在这种情况下,我们需要覆盖在第二个 activity returns 结果时自动调用的 onActivityResult 方法。
MainActivity.java
public class MainActivity extends Activity {
TextView textView1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1=(TextView)findViewById(R.id.textView1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent, 2);// Activity is started with
requestCode 2
}
});
}
// Call Back method to get the Message form other Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if(requestCode==2)
{
String message=data.getStringExtra("MESSAGE");
textView1.setText(message);
}
}
SecondActivity.java
public class SecondActivity extends Activity {
EditText editText1;
Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
editText1=(EditText)findViewById(R.id.editText1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String message=editText1.getText().toString();
Intent intent=new Intent();
intent.putExtra("MESSAGE",message);
setResult(Activity.RESULT_OK,intent);
finish();//finishing activity
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
}
//do Some work
Intent i = new Intent(this,MainActivity2..class);
startActivityForResult(i,12);
}
在MainActivity2.class
// after your work complete
Intent i =new Intent();
i.putExtra("result",true);// any data you want to pass
setResult(RESULT_OK,i);
在此之后我们处理结果
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch(requestCode){
case 12:
if(resultCode == Activity.RESULT_OK){// onsuccess do something
boolean isSucces = data.getBooleanExtra("result",false);
if(isSuccess)// perform action
{// show toast}
}
}
}
从您的 MainActivity 调用 TargetActivity 使用 startActivityForResult()-
例如:
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra(); // sent your putExtra data here to pass through intent
startActivityForResult(intent, 1000);
在您的意图中,将您想要 return 的数据设置回 MainActivity。如果您不想return返回任何数据,那么您不需要设置任何数据。
例如:
在TargetActivity中如果你想发回数据:
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK, returnIntent);
finish();
如果你不想return数据:
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
现在在您的 MainActivity class 中为 onActivityResult() 方法编写以下代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1000) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
// Do your task here.
}
}
}
我发现最好使用回调。
在装载机中: 创建内部 class
MyCallback callback;
viod setCallback(MyCallback callback){
this.callback = callback;
}
viod onStop(){
callback = null;
}
interface MyCallback{
void doSomething(Params params);
}
在主要活动中: 实施 MyCallback 在 onCreate
中设置引用Loader loader = new Loader();
loader.setCallback(this);
override method doSomething()
@override
void doSomething(Params params){
//do your thing with the params…
}
当作业在 Loader 调用 MainActivity 中完成时:
callback.doSomething(params);
在 onStop() 中销毁 MainActivity 中的引用
loader.onStop();