startActivityForResult

来源:互联网 发布:滇红 知乎 编辑:程序博客网 时间:2024/06/16 18:23

从one Activity跳到 two Activity:

 

startActivity(new intent(this,two.class));

 

但是我们想在two里加个按钮,当点击时就返回到原来的one中,

 

这时我们当然可以在点击事件中写:

 

startActivity(new intent(this,one.class));

 

但是我们还有另一种方法:

 

从one Activity跳到 two Activity:

 

startActivityResult(new intent(this,two.class),1);

 

1 是用来标记是否是这个startActivityResult的返回值的,一般情况下如果只有一个startActivityResult,没有什么作用,但是如果我们one中有两个startActivityResult,我们可以用1,2......来区分是那个startActivityResult的返回值,确定这个返回结果是谁返回的。

 

我们跳到two中了,在two里的按钮的点击事件中返回到one:

 

 this.setResult(RESULT_OK);

  this.finish();

 

这样把RESULT_OK这个值返回给了one,在one的

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {}

中处理:

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode==RESULT_OK&&requestCode==1) {

 

              //要做的事。

 

        }

    }

 

2 我们想把数据从one带到two,再从two带到one:

1 ---->2; 1中:

Intent intent = new Intent(this, Activity2.class);  

Bundle bundle = new Bundle();

bundle.putString("first", "one");

intent .putExtras(bundle); 

startActivityForResult(intent ,1);

 

2中取得1传过来的数据:

Intent intent = this.getIntent();

Bundle bundle = intent .getExtras();

String string = bundle .getString("first");

 

2的按钮的点击事件中返回1,并带着数据:

 

Intent intent = new Intent();

Bundle bundle = new Bundle();

bundle.putString("second", "two");

intent.putExtras(bundle);

this.setResult(RESULT_OK, intent);

this.finish();

 

返回1后在1中处理返回的结果和返回的数据:

  1. protected void onActivityResult(int requestCode, int resultCode,  
  2.                                     Intent data){  
  3.         switch (resultCode){  
  4.         case RESULT_OK:  
  5.             Bundle bundle = data.getExtras();  
  6.               
  7.             String string = bundle.getString("second");  
  8.               
  9.             updateText(string);  
  10.         }  
  11.     } 

下面是个demo
MainActivity.java
package com.example.expandablelist_test;import java.util.ArrayList;import java.util.List;import android.animation.AnimatorSet.Builder;import android.app.*;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.BaseExpandableListAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.TextView;import android.widget.Toast;import android.os.Build;public class MainActivity extends Activity {private Button bt;private TextView tv_show;private EditText ed_input;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt = (Button) findViewById(R.id.bt);tv_show = (TextView) findViewById(R.id.tv_show);ed_input  =(EditText) findViewById(R.id.ed_input);bt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Bundle bundle = new Bundle();bundle.putString("value", ed_input.getText().toString());Intent i = new Intent();i.putExtra("bundle",bundle);i.setClass(MainActivity.this, SecondActivity.class);//1 是用来标记是否是这个startActivityResult的返回值的,一般情况下如果只有一个startActivityResult,没有什么作用,//但是如果我们one中有两个startActivityResult,我们可以用1,2......来区分是那个startActivityResult的返回值,//确定这个返回结果是谁返回的。startActivityForResult(i, 1);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode==1 && resultCode==RESULT_OK){Toast.makeText(MainActivity.this, "返回成功", Toast.LENGTH_SHORT).show();;}super.onActivityResult(requestCode, resultCode, data); }}
package com.example.expandablelist_test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class SecondActivity extends Activity {private Button bt_back;private TextView tv_show2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.secondlayout);bt_back = (Button) findViewById(R.id.bt_back);tv_show2 = (TextView) findViewById(R.id.tv_show2);bt_back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SecondActivity.this.setResult(RESULT_OK);SecondActivity.this.finish();}});Intent i = this.getIntent();Bundle bundle = i.getBundleExtra("bundle");tv_show2.setText(bundle.getString("value"));}}

 SecondActivity.java 
<pre name="code" class="java">package com.example.expandablelist_test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class SecondActivity extends Activity {private Button bt_back;private TextView tv_show2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.secondlayout);bt_back = (Button) findViewById(R.id.bt_back);tv_show2 = (TextView) findViewById(R.id.tv_show2);bt_back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SecondActivity.this.setResult(RESULT_OK);SecondActivity.this.finish();}});Intent i = this.getIntent();Bundle bundle = i.getBundleExtra("bundle");tv_show2.setText(bundle.getString("value"));}}


布局文件此处省略

0 0
原创粉丝点击