(十八)——使用意图筛选器和实现浏览网页(附源码)

最后更新于:2022-04-01 20:17:09

**使用意图筛选器** **[点击下载源码](http://download.csdn.net/detail/u012904198/7374025)** 1、创建一个Intents项目,给该项目添加一个新类,命名为MyBrowserActivity,在res/layout文件夹下新增一个browser.xml; 2、在AndroidManifest.xml文件中添加如下代码: 添加权限: ~~~ ~~~ ~~~ ~~~ action:动作;category:类别;data:指明获取的数据类型。 3、在main.xml文件中添加三个Button: ~~~
';

(十七)——使用意图调用内置应用程序

最后更新于:2022-04-01 20:17:06

**使用意图调用内置应用程序** 1、创建一个新的Android项目并命名为Intents,在main.xml文件中添加两个Button: ~~~
';

(十六)——碎片之间进行交互(附源码)

最后更新于:2022-04-01 20:17:04

**碎片之间进行交互** **[点击下载源码](http://download.csdn.net/detail/u012904198/7337195)** 很多时候,一个活动中包含一个或者多个碎片,它们彼此协作,向用户展示一个一致的UI。在这种情况下,碎片之间能进行通信并交换数据十分重要。 1、使用上一篇中创建的同一个项目,在fragment.xml中添加TextView的标识id: ~~~ android:id="@+id/lblFragment1" ~~~ 2、在fragment2.xml中添加一个Button,用于与fragment1进行交互: ~~~
';

(十五)——碎片的生命周期(附源码)

最后更新于:2022-04-01 20:17:02

**碎片的生命周期** **[点击下载源码](http://download.csdn.net/detail/u012904198/7336969)** 与活动类似,碎片具有自己的生命周期。理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态。 1、使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: ~~~ package net.zenail.Fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Log.d("Fragment 1", "onCreateView"); // 实例化布局文件 return inflater.inflate(R.layout.fragment1, container, false); } @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); Log.d("Fragment 1", "onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Log.d("Fragment 1", "onCreate"); } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); Log.d("Fragment 1", "onActivityCreated"); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Log.d("Fragment 1", "onStart"); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); Log.d("Fragment 1", "onResume"); } @Override public void onPause() { super.onPause(); Log.d("Fragment 1", "onPause"); }; public void onStop() { // TODO Auto-generated method stub super.onStop(); Log.d("Fragment 1", "onStop"); } @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); Log.d("Fragment 1", "onDestroyView"); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("Fragment 1", "onDestroy"); } @Override public void onDetach() { // TODO Auto-generated method stub super.onDetach(); Log.d("Fragment 1", "onDetach"); } } ~~~ 2、按Ctrl+F11,将Android模拟器切换到横向模式; 3、在Eclipse中按下F11键,在模拟器上调试应用程序; 4、当应用程序加载到模拟器中后,LogCat窗口会显示如下内容: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b8cdc1e.jpg) 5、单击模拟器上的Home按钮,LogCat窗口中显示如下输出: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b8e3066.jpg) 6、在模拟器上长按Home按钮,再单击Fragments以启动应用程序,LogCat显示如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b9050d1.jpg) 7、最后,单击模拟器中Back按钮,LogCat窗口显示如下输出: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b918f5a.jpg) 8、由上面的实例可知,碎片经历的过程如下: 碎片被创建时:onAttach()-->onCreate()-->onCreateView()-->onActivityCreated(); 碎片进入后台模式时:onPause()-->onStop(); 碎片变为可见时:onStart()-->onResume(); 碎片被销毁时:onPause()-->onStop()-->onDestroyView()-->onDestroy()-->onDetach(); 9、与活动一样,碎片可以使用Bundle对象在以下状态中还原碎片的实例: onCreate()、onCreateView()、onActivityCreated()。
';

(十四)——在运行时添加碎片(附源码)

最后更新于:2022-04-01 20:17:00

**在运行时添加碎片** **[点击获取源码](http://download.csdn.net/detail/u012904198/7336767)** 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中。 1、使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个元素; 2、在FragmentActivity.java中添加下面的代码: ~~~ FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction();//添加FragmentTransaction来操作碎片 //获取设备当前的屏幕信息:判断处于纵向模式还是横向模式 WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); if (display.getWidth() > display.getHeight()) { //横向模式 Fragment1 fragment1 = new Fragment1(); fragmentTransaction.replace(android.R.id.content, fragment1); } else { //纵向模式 Fragment2 fragment2 = new Fragment2(); fragmentTransaction.replace(android.R.id.content, fragment2); } fragmentTransaction.commit();提交更改 ~~~ 3、在模拟器上运行程序,效果如下: 当设备处于纵向模式时,显示碎片2,: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b86a21b.jpg) 当设备处于横向模式时,显示碎片1: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b89d291.jpg)
';

(十三)——碎片(一)

最后更新于:2022-04-01 20:16:57

**碎片** 碎片可看作另外一种形式的活动,可以创建碎片来包含视图。 碎片总是嵌入在活动中,一般有两种常见形式: 1、碎片A和碎片B分别处于不同的活动中,当选择碎片A中的某一项时,触发碎片B启动; 2、碎片A和碎片B处于同一个活动中,共享同一活动,以创建更佳的用户体验。 [点此下载完整源码~](http://download.csdn.net/detail/u012904198/7327509)**(代码适用于本文章所讲)** 1、创建一个名为“Fragments”的项目,在res/layout文件夹下,分别新建fragment1.xml、fragment2.xml;在当前包名下,分别新建Fragment1.java、Fragment2.java: fragment1.xml: ~~~ ~~~ fragment2.xml: ~~~ ~~~ Fragment1.java: ~~~ package net.zenail.fragments; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment {// 继承Fragment基类 // 绘制碎片UI:使用一个LayoutInflauter对象来增大指定XML文件中的UI。container参数引用父ViewGroup,准备用于嵌入碎片的活动。 // savedInstanceState参数允许将碎片还原到前一次保存的状态。 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment1, container, false); } } ~~~ Fragment2.java: ~~~ package net.zenail.fragments; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment2, container, false); } } ~~~ 2、在main.xml文件中添加两个碎片: ~~~ ~~~ 3、运行,效果如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b82d3c3.jpg)
';

(十二)——使用意图传递数据的几种方式

最后更新于:2022-04-01 20:16:55

**使用意图传递数据的几种方式** **[点此获取完整代码](http://download.csdn.net/detail/u012904198/7312525)** 我们除了要从活动返回数据,也常常要传递数据给活动。对此我们可以使用Intent对象将这些数据传递给目标活动。 1、创建一个名为PassingData的项目,在activity_main.xml文件中添加一个Button: ~~~
';

(十一)——从意图返回结果

最后更新于:2022-04-01 20:16:53

**从意图返回结果** startActivity()方法调用另一个活动,但并没有返回结果给当前活动。此时如想从一个活动中回传数据,就要使用startActivityForResult()方法。 **[点此获取完整代码~  ](http://download.csdn.net/detail/u012904198/7311961)** 1、使用上一篇中创建的项目,在secondactivity.xml文件中添加文本框和按钮,代码如下: ~~~
';

(十)——使用意图链接活动

最后更新于:2022-04-01 20:16:51

**使用意图链接活动** 1、新建一个名为“UsingIntent”的项目,右击src文件夹下的包名,选择New-->Class选项,并将新的类文件名命名为“SecondActivity”; 2、打开AndroidManifest.xml文件,添加如下代码: ~~~ ~~~ 3、在res/layout文件夹下新建一个secondactivity.xml文件,修改代码如下: ~~~ ~~~ 4、打开SecondActivity.java文件,添加如下代码,添加创建方法: ~~~ protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.secondactivity); } ~~~ 5、在activity_main.xml文件中添加如下代码,新建一个Button: ~~~
';

(九)——更复杂的进度对话框

最后更新于:2022-04-01 20:16:48

**显示操作进度的对话框** 1、使用上一篇创建的同一项目,在activity_main.xml文件中添加一个Button: ~~~
';

(八)——显示进度对话框

最后更新于:2022-04-01 20:16:46

**显示进度对话框** 我们常常有这样的经历:执行某一应用程序时,需要等待一会,这时会显示一个进度(Please Wait)对话框,让用户知道操作正在进行。 我们继续在上一篇中的程序中添加代码~ 1、在上一篇的activity_main.xml文件中添加一个Button,添加后的代码如下: ~~~
';

(七)——显示对话框窗口

最后更新于:2022-04-01 20:16:44

显示对话框窗口 1、创建Dialog1项目,在activity_main.xml文件中添加一个Button: ~~~
';

Android常见UI组件之ListView(二)——定制ListView

最后更新于:2022-04-01 20:16:42

**Android常见UI组件之ListView(二)——定制ListView** 这一篇接上篇,展示ListView中选择多个项及实现筛选功能~ 1、在位于res/values文件夹下的strings.xml文件中添加如下代码: ~~~ BasicView5 Settings Hello world! Dwight D. Eisenhower John F. Kennedy Lyndon B. Johnson Richard Nixon Gerald Ford Jimmy Carter Ronald Reagan George H.W. Bush Bill Clinton George W. Bush Barack Obama ~~~ 2、修改上一篇中的BasicView5.java文件的代码,修改后的代码如下: ~~~ package com.example.basicview5; import android.os.Bundle; import android.app.Activity; import android.app.ListActivity; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { String[] presidents;//将列表信息存储在strings.xml文件中,再以编程方式读取 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ---no need to call this---// // setContentView(R.layout.activity_main); ListView listView = getListView();// 获取ListActivity的列表视图 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);// 可以选择多个项 listView.setTextFilterEnabled(true);//启用筛选功能,在键盘上输入,ListView自动筛选 // getResources()方法以编程方式检索与应用程序捆绑的资源 presidents = getResources().getStringArray(R.array.presidents_array); setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_checked, presidents)); } public void onListItemClick(ListView parent, View v, int position, long id) { Toast.makeText(this, "You have selected " + presidents[position], Toast.LENGTH_SHORT).show(); } @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; } } ~~~ 3、运行程序,效果如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b4620c7.jpg) 4、在activity_main.xml文件中添加代码如下: ~~~
';

Android常见UI组件之ListView(一)

最后更新于:2022-04-01 20:16:39

**使用ListView显示一个长的项列表** 1、新建一个名为“BasicView5”的Android项目; 2、修改BasicView5.java文件,修改后的程序如下: ~~~ package com.example.basicview5; import android.os.Bundle; import android.app.Activity; import android.app.ListActivity; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { String[] presidents = { "Dwight D. Eisenhower", "John F. Kennedy", "Lyndon B. Johnson", "Richard Nixon", "Gerald Ford", "Jimmy Carter", "Ronald Reagan", "George H. W. Bush", "Bill Clinton", "George W. Bush", "Barack Obama" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ---no need to call this---// // setContentView(R.layout.activity_main) setListAdapter(new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, presidents)); } public void onListItemClick(ListView parent, View v, int position, long id) { Toast.makeText(this, "You have selected " + presidents[position], Toast.LENGTH_SHORT).show(); } @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; } } ~~~ 3、运行结果:如下图,为点击“Richard Nixon”后的样子: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b3db790.jpg) 详解: (1)BasicView5类扩展了ListActivity类,ListActivity类扩展了Activity类并通过绑定到一个数据源来显示一个项列表; (2)无需修改main.xml来包含ListView:ListActivity类本身已经包含了一个ListView,所以在onCreate()方法中,不需要调用setContentView()方法来从main.xml文件中加载用户界面; (3)在onCreate()方法中,使用setListAdapter()方法来用一个ListView以编程方式填充活动的整个屏幕。ArrayAdapter对象管理将由ListView显示的字符串数组; (4)单击ListView中的一个列表项时,会触发onListItemClick()方法; 下一篇来实现对ListView定制通用视图~
';

Eclipse启动时提示fail to create the Java Virtual Machine问题的解决

最后更新于:2022-04-01 20:16:37

今天偶然打开Eclipse,发现无法打开,出现如下提示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b39dc93.jpg) 后来经过上网查询,发现是eclipse.ini文件的问题,打开eclipse安装目录下的eclipse.ini文件: ~~~ -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807 -product com.android.ide.eclipse.adt.package.product --launcher.XXMaxPermSize 256m -showsplash com.android.ide.eclipse.adt.package.product --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx768m -Declipse.buildId=v22.3.0-887826 -XX:MaxPermSize=512m ~~~ 将其中的256m改为128m,512m改为256m即可~改后如下: ~~~ -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807 -product com.android.ide.eclipse.adt.package.product --launcher.XXMaxPermSize 128m -showsplash com.android.ide.eclipse.adt.package.product --launcher.XXMaxPermSize 128m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx768m -Declipse.buildId=v22.3.0-887826 -XX:MaxPermSize=256m ~~~ 经过简单的修改,即可正常启动~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b3b858d.jpg)
';

adt-bundle-linux-x86_64-20131030下新建工程提示找不到adb和R.java问题的解决

最后更新于:2022-04-01 20:16:35

**adt-bundle-linux-x86_64-20131030下新建工程提示找不到adb和R.java问题的解决** 在ubuntu14.04下,搭建Android开发环境,下载官方的adt-bundle-linux-x86_64-20131030后,启动eclipse,新建一个项目,提示找不到“R”文件,即R文件未成;启动模拟器提示“...Cannot run program "/home/zenail/adt-bundle-linux-x86_64-20131030/sdk//tools/emulator": error=2, 没有那个文件或目录”。 经过反复地检查安装步骤,还是解决不了问题,顿时觉得世界暗淡了许多...后来终于在网上找到了原因:因为我的系统是64位的,而Android sdk只有32位的程序(adb是32位的),必须要安装相应的库才行~有人说要安装ia32-libs,可到我的系统上却提示不可安装,还好又有位大神给出别的答案: ~~~ sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1。 在安装如上库后,重启eclipse,一切OK!在此感谢那些大侠啦~~ ~~~
';

(六)——从Activity返回数据

最后更新于:2022-04-01 20:16:32

1、在实际应用中,我们不仅要向Activity中传数据,也要从Activity中返回数据。虽然传递数据和返回数据类似,也可以采用前面四篇中提到的4种方法,但是一般建议采用Intent对象的方式来返回数据,使用这种方式返回数据,需要使用startActivityForResult方法来显示Activity; 2、新建Android项目“android_intent_forresult”,打开布局文件“activity_main.xml”,添加“LinearLayout”、“TextView”、“EditView”等标签,代码如下: ~~~ ~~~ 效果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b2911c2.jpg) 3、新建布局文件“other.xml”,添加“TextView”、“EditView”、“Button”标签,代码如下: ~~~ ~~~ 4、新建“OtherActivity.java”文件,并使其继承“Activity”,添加“onCreate”方法,代码如下: ~~~ package com.android.myintent; import android.app.Activity; import android.os.Bundle; public class OtherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); } } ~~~ 5、在“AndroidManifest.xml”清单文件中加入“Activity”,加入代码: ~~~ ~~~ 6、在“Main.java”中添加Button成员和“setOnClickListener”,实现两个Button的跳转,点击第一个Activity后,出现第二个Activity;在此方法内部创建意图,用“startActivityForResult”启动意图,并在Main类里重写“onActivityResult”;添加“EditText”成员,实现数据的输入并传入Intent中。代码如下: ~~~ package com.android.myintent; import android.R.integer; 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.EditText; public class Main extends Activity { private Button button; private final static int REQUESTCODE = 1;// 表示返回的结果码 private EditText one, two, result; // 数据输入 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); one = (EditText) this.findViewById(R.id.one); two = (EditText) this.findViewById(R.id.two); result = (EditText) this.findViewById(R.id.result); button = (Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub // 点击后获得用户录入的值 int a = Integer.parseInt(one.getText().toString()); int b = Integer.parseInt(two.getText().toString()); // 创建意图 Intent intent = new Intent(Main.this, OtherActivity.class); // 将值传入意图 intent.putExtra("a", a); intent.putExtra("b", b); startActivityForResult(intent, REQUESTCODE);// 表示可以返回结果 } }); } // 再重写一个onActivityResult方法,作用是将当前Activity中的数据传递到另一个Activity的意图中后,实现跳转,再回传回来。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); } @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; } } ~~~ 7、在“OtherActivity.java”文件中添加Button和TextView成员,获取意图中的数据,代码如下: ~~~ package com.android.myintent; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; public class OtherActivity extends Activity { private Button button; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); // 实例化button和textview button = (Button) this.findViewById(R.id.button2); textView = (TextView) this.findViewById(R.id.msg); Intent intent = getIntent(); // 获取Intent // 取出Intent中的值 int a = intent.getIntExtra("a", 0); int b = intent.getIntExtra("b", 0); textView.setText(a + " + " + b + " = " + " ? "); } } ~~~ 运行一下,看下效果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b2c4c38.jpg) 点击“计算结果”,跳转到第二个Activity: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b2ef364.jpg) 8、回到“Main.java”文件中,从OtherActivity中获取数据并显示,代码如下: ~~~ package com.android.myintent; import android.R.integer; 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.EditText; public class Main extends Activity { private Button button; private final static int REQUESTCODE = 1;// 表示返回的结果码 private EditText one, two, result; // 数据输入 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); one = (EditText) this.findViewById(R.id.one); two = (EditText) this.findViewById(R.id.two); result = (EditText) this.findViewById(R.id.result); button = (Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub // 点击后获得用户录入的值 int a = Integer.parseInt(one.getText().toString()); int b = Integer.parseInt(two.getText().toString()); // 创建意图 Intent intent = new Intent(Main.this, OtherActivity.class); // 将值传入意图 intent.putExtra("a", a); intent.putExtra("b", b); startActivityForResult(intent, REQUESTCODE);// 表示可以返回结果 } }); } // 再重写一个onActivityResult方法,作用是将当前Activity中的数据传递到另一个Activity的意图中后,实现跳转,再回传回来。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == 2) {// 如果第二个Activity(OtherActivity)正常结束(“2”为返回码resultCode)。 if (requestCode == REQUESTCODE) {// 如果返回状态为1,即成功返回,就在意图的返回值中取出数据。 int three = data.getIntExtra("three", 0);// 从第二个Activity中返回意图中的数据。 result.setText(String.valueOf(three)); } } } @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; } } ~~~ 9、在“OtherActivity.java”文件中,添加点击Button事件,使数据回传~,代码如下: ~~~ package com.android.myintent; 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.TextView; public class OtherActivity extends Activity { private Button button; private TextView textView; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); // 实例化button和textview button = (Button) this.findViewById(R.id.button2); textView = (TextView) this.findViewById(R.id.msg); editText = (EditText) this.findViewById(R.id.three); Intent intent = getIntent(); // 获取Intent // 取出Intent中的值 int a = intent.getIntExtra("a", 0); int b = intent.getIntExtra("b", 0); textView.setText(a + " + " + b + " = " + " ? "); // 添加点击事件并回传数据 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent();// 重新声明一个意图。 int three = Integer.parseInt(editText.getText().toString());// 获取输入的值。 intent.putExtra("three", three); // 将three回传到意图中。 // 通过Intent对象返回结果,调用setResult方法。 setResult(2, intent);// resultCode为大于1的数,随意选取,为2即可。 finish();// 结束当前Activity的生命周期。 } }); } } ~~~ 10、运行,结果: (1)输入2和3: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b32712a.jpg) (2)单击“计算结果”,跳转: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b34a6cf.jpg) (3)输入5,单击“返回结果”,数据回传: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b373635.jpg) 实现要点: (1)在“Main.java”中,创建Intent并启动Activity,调用“startActivityForResult”,并定义当前请求码; (2)重写“onActivityResult”方法,并设置条件,若满足返回码值,则将第二个Activity中的数据传回来,赋给当前Activity的“result”编辑框; (3)在“OtherActivity.java”中,再创建一个意图,将数据填写到意图中,通过意图将结果回传(通过“setResult”方法); (4)结束当前Activity生命周期;
';

(五)——通过全局变量传递数据

最后更新于:2022-04-01 20:16:30

1、全局对象是Activity之间传递数据的一种比较实用的方式,比如在JavaWeb中有四个作用域,这四个作用域从小到大分别是Page、Request、Session和Application,其中Application域在应用程序的任何地方都可以使用和访问,除非是Web服务器停止。Android中的全局对象非常类似于JavaWeb中的Application域,只要Android应用程序不清除内存,全局对象就可以一直访问~ 2、新建一个Android项目:“android_app”,进入“main.xml”添加一个Button,代码如下: ~~~
';

(四)——通过剪切板传递数据

最后更新于:2022-04-01 20:16:28

1、在Activity之间传递数据还可以利用一些技巧,无论是Windows还是Linux操作系统,都支持一种叫做剪切板的技术(某一程序将数据复制到剪切板上,其它的任何程序都可以从剪切板中获取数据); 2、新建一个名为“android_intent3”的Android工程; 3、在main.xml文件中添加Button: ~~~
';

(三)——使用静态变量传递数据

最后更新于:2022-04-01 20:16:26

1、使用Intent可以很方便地在不同的Activity间传递数据,这个也是官方推荐的方式,但是也有一定的局限性,就是Intent无法传递不能序列化的对象,然而这个问题可以用静态变量来解决~ 2、下面来具体举个例子,新建一个Android工程,如下图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-23_57bc06b09adc1.jpg) 3、在布局文件(“res/layout”)中添加按钮“Button”,代码如下: ~~~
';