Android中两个Activity之间数据传递及返回
来源:互联网 发布:linux apache压力测试 编辑:程序博客网 时间:2024/05/16 09:51
下面通过一个例子来详细说明
先上代码,再细细分析
MainActivity
public class MainActivity extends Activity { private Button mainBtn=null; private final static int REQUEST_CODE=1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mainBtn=(Button)findViewById(R.id.mainBtn); mainBtn.setOnClickListener(listener); } private OnClickListener listener=new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); intent.putExtra("str", "Intent Demo"); startActivityForResult(intent, REQUEST_CODE); } }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode==REQUEST_CODE) { if (resultCode==SecondActivity.RESULT_CODE) { Bundle bundle=data.getExtras(); String str=bundle.getString("back"); Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show(); } } } }
intent.putExtra(“str”, “Intent Demo”);
这一行就是我们要从MainActivity传递到SecondActivity的参数,intent.putExtra可以传递大部分的类型,对于其他的数据类型可以通过bundle来进行传递
Bundle bundle = new Bundle(); bundle.putString("str", "Intent Demo");intent.putExtras(bundle);
其实如果我们观察putExtra的源代码
public Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putString(name, value); return this; }
发现也是通过bundle进行传值的
若需要获得返回值,则用startActivityForResult(),并需要知道返回的一个RESULT_CODE(int类型),可以理解为指针,用intent.setClass() 确定传递给那个类(这里包括Activity、Service等)。第二个Activity—本例中的SecondActivity ,用Intent intent=getIntent();Bundle bundle=intent.getExtras();String str=bundle.getString(“str”);获得前一个Activity传来的参数,这里还需要返回给MainActivity参数,用到了setResult(RESULT_CODE, intent); 这里 要说明的是RESULT_CODE必须与前一个Activity一致,否则就不能正常返回。而第一个MainActivity通过重写onActivityResult()来取得相应的返回值。
若不需要返回,可以直接用startActivity()。
SecondActivity
public class SecondActivity extends Activity { public final static int RESULT_CODE=1; private TextView secondTxt; private Button secondBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Intent intent=getIntent(); Bundle bundle=intent.getExtras(); String str=bundle.getString("str"); secondTxt=(TextView)findViewById(R.id.secondTxt); secondTxt.setText(str); secondBtn=(Button)findViewById(R.id.secondBtn); secondBtn.setOnClickListener(listener); } private OnClickListener listener=new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.putExtra("back", "Back Data"); setResult(RESULT_CODE, intent); finish(); } }; }
同样这里的
Bundle bundle=intent.getExtras(); String str=bundle.getString("str");
与getIntent().getStringExtra(name) 是等价的
public String getStringExtra(String name) { return mExtras == null ? null : mExtras.getString(name); }
对于初学者,还得提醒一下,别忘记在AndroidManifest.xml添加SecondActivity类
<activity android:name=".SecondActivity" android:label="@string/app_name"> </activity>
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android中两个Activity之间数据传递及返回
- Android 两个Activity之间传递数据及返回
- Android中Activity之间数据传递及返回
- Android Studio中两个Activity之间的转换及数据的传递
- Android中在两个Activity之间进行数据传递
- Android 在两个 Activity 之间传递数据
- Android之两个activity之间传递数据且有返回值
- Android中Activity之间传递数据详解
- Android Activity、Fragment之间的数据传递和返回
- Android学习笔记-两个Activity之间传递数据
- [一问一答][Android] 如何在两个Activity之间传递(共享)数据
- 自定义EasyUI的datetimebox控件日期时间的显示格式
- POJ,3177 Redundant Paths
- kubernetes环境搭建
- Android与Linux的区别
- 使用ReentrantLock和Condition实现生产者消费者模型
- Android中两个Activity之间数据传递及返回
- 最长回文子串
- java 并发安全的思考
- hdu 1241 Oil Deposits (dfs经典入门)
- oracle插入数据报ORA-00001:违反唯一约束条件
- 练习 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F。
- Struts2框架详细用法第一课
- shell脚本定时重启tomcat
- Hint: This may be the result of an unspecified view, due to default view name generation.)]