通过startActivityForResult方法来得到Activity的回传值
来源:互联网 发布:詹姆斯琼斯 知乎 编辑:程序博客网 时间:2024/04/19 13:28
通过startActivityForResult方法来得到Activity的回传值
在一些情况下,我们通过 A activity跳转到 B activity上,这时希望 A activtiy能从 B activity上得到一些返回值,这个时候我们就不能使用startActivity方法了,而是使用 startActivityForResult方法来完成我们的操作。
例如,我们希望完成下面一个功能,在MainActivity上,写上一个算术表达式,然后跳转到到第二个SecondActivity上,在这个Activity上将第一个Activity的表达式显示出来,然后我们可以输入我们的算术表达式结果,然后点击按钮,将这个结果值又返回给我们的MainActivity,并将结果填充到算术表达式中,具体看如下代码:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editText1" android:layout_width="70dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView1" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/editText1" android:text=" + " android:textSize="30sp" /> <EditText android:id="@+id/editText2" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/textView1" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/editText2" android:text=" = " android:textSize="30sp" /> <EditText android:id="@+id/editText3" android:layout_width="70dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/textView2" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/editText3" android:layout_centerInParent="true" android:layout_marginTop="30dp" android:text="跳转到SecondActivity"/></RelativeLayout>second.xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="70dp" android:layout_height="wrap_content" android:textSize="20sp"/> <EditText android:id="@+id/editText1" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/textView1"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/editText1" android:text="返回给MainActivity"/> </RelativeLayout>
然后我们来看看两个Activity
MainActivity:
public class MainActivity extends Activity{ private Button button; private EditText editText1; private EditText editText2; private EditText editText3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); editText1 = (EditText)findViewById(R.id.editText1); editText2 = (EditText)findViewById(R.id.editText2); editText3 = (EditText)findViewById(R.id.editText3); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("message", editText1.getText().toString().trim() + " + " + editText2.getText().toString().trim() + " = ?"); intent.setClass(MainActivity.this, SecondActivity.class); /* * 如果希望启动另一个Activity,并且希望有返回值,则需要使用startActivityForResult这个方法, * 第一个参数是Intent对象,第二个参数是一个requestCode值,如果有多个按钮都要启动Activity,则requestCode标志着每个按钮所启动的Activity */ startActivityForResult(intent, 1000); } }); } /** * 所有的Activity对象的返回值都是由这个方法来接收 * requestCode: 表示的是启动一个Activity时传过去的requestCode值 * resultCode:表示的是启动后的Activity回传值时的resultCode值 * data:表示的是启动后的Activity回传过来的Intent对象 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 1000 && resultCode == 1001) { String result_value = data.getStringExtra("result"); editText3.setText(result_value); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; }}我们看到,这里我们使用的是 startActivityForResult 的这个方法,
第一个指定我们的Intent对象,第二个requestCode指定我们的一个启动标志值,因为我们可能有多个按钮,如果都是跳转到同一个Activity对象上,我们需要对其进行标志,才知道是哪个Activity对象跳转过来的。
我们看到这里还有一个 onActivityResult 方法,这个方法就是用来处理我们Activity的回传值的方法,所有的Activity回传值的操作都是在这个方法中完成。
接下来,我们看看SecondActivity这个类:public class SecondActivity extends Activity{ private Button button; private TextView textView; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); button = (Button)findViewById(R.id.button1); textView = (TextView)findViewById(R.id.textView1); editText = (EditText)findViewById(R.id.editText1); Intent intent = getIntent(); String message = intent.getStringExtra("message").toString().trim(); textView.setText(message); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String result = editText.getText().toString().trim(); Intent intent = new Intent(); intent.putExtra("result", result); /* * 调用setResult方法表示我将Intent对象返回给之前的那个Activity,这样就可以在onActivityResult方法中得到Intent对象, */ setResult(1001, intent); // 结束当前这个Activity对象的生命 finish(); } }); }}这个类里面我们将MainActivity传过来的值给TextView赋上,然后通过点击按钮将值回传给我们的 MainActivity,通过 setResult 方法可以将我们的值保存在Intent对象中,并返回给MainActivity对象,通过的 onActivityResult 方法来处理得到的回传Intent对象。finish()方法我们可以显示的结束这个Activity对象的生命。
0 0
- 通过startActivityForResult方法来得到Activity的回传值
- 如何通过窗体名称(字符串)来得到窗体的实例?
- 通过arp来得到远程机器的mac地址
- 通过属性文件来得到数据库的链接
- Activity之间传值的方法-startActivityForResult
- Activity基本单元、startActivityForResult方法的使用
- startActivityForResult方法启动Activity
- 返回数据到前一个Activity---startActivityForResult方法
- 返回数据到前一个Activity---startActivityForResult方法
- Android入门--返回数据到前一个Activity--startActivityForResult 方法
- 返回数据到前一个Activity StartActivityForResult方法
- 在TabHost的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题.
- 在Viewpager的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题.
- 在Viewpager的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题
- 通过startActivityForResult来调用Activity
- 使用weblogic连接池来得到数据库连接(通过配置文件进行读取的优化方案)
- mybatis通过传bean的方式来得到存储过程中游标的值list
- C#通过获取CMD里ipconfig命令的结果来得到IP
- 面试教训2
- Android消息推送机制
- pthread线程清理
- PHP_Redis自定类
- 设计一个缓存系统 java多线程读写锁的应用
- 通过startActivityForResult方法来得到Activity的回传值
- Android设计模式源码解析之单例模式
- Gradle实现的两种简单的多渠道打包方法
- int main(int argc, char *argv[])的含义
- 使用chrome进行简单调试
- hdoj1176 免费馅饼(DP)
- 基于CSS属性display:table的表格布局的使用
- ubuntu 14.04下安装 ffmpeg 3.0
- uboot常用命令行