如何将一个活动的值传递给之前的活动

我如何将一个屏幕的值传递到其前一个屏幕?

考虑这种情况:我有两个活动。 第一个屏幕有一个TextView和一个button,第二个活动有一个EditText和一个button。

如果我点击第一个button,那么它必须移动到第二个活动,这里用户必须在文本框中键入一些东西。 如果他从第二个屏幕按下button,那么文本框中的值应该移到第一个活动,并且应该显示在第一个活动TextView

捕获在另一个活动中执行的动作需要三个步骤。

通过使用主活动中的startActivityForResult启动辅助活动(您的“编辑文本”活动)作为子活动。

 Intent i = new Intent(this,TextEntryActivity.class); startActivityForResult(i, STATIC_INTEGER_VALUE); 

在子活动中,当用户单击button时,不需要closures活动,而是需要创build一个新的Intent,并将input的文本值包含在其extras包中。 在调用finishclosures第二个Activity之前,将它传回给父调用setResult

 resultIntent = new Intent(null); resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue); setResult(Activity.RESULT_OK, resultIntent); finish(); 

最后一步是在调用Activity中,重写onActivityResult来监听来自文本条目Activity的callback。 从返回的Intent中获取额外的内容以获得您应该显示的文本值。

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case (STATIC_INTEGER_VALUE) : { if (resultCode == Activity.RESULT_OK) { String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER); // TODO Update your TextView. } break; } } } 

有几种方法可以访问其他类或Activity中的variables或对象。

A.数据库

B.共享喜好。

C.对象序列化。

D.一个能容纳普通数据的类可以被命名为Common Utilities它取决于你。

E.通过Intents和Parcelable接口传递数据。

这取决于你的项目需求。

A. 数据库

SQLite是embedded到Android的开源数据库。 SQLite支持标准的关系数据库function,如SQL语法,事务和预处理语句。

教程 – http://www.vogella.com/articles/AndroidSQLite/article.html

B. 共享首选项

假设你想存储用户名。 所以现在有两件事是关键的用户名, 值的价值。

如何存储

  // Create object of SharedPreferences. SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); //now get Editor SharedPreferences.Editor editor = sharedPref.edit(); //put your value editor.putString("userName", "stackoverlow"); //commits your edits editor.commit(); 

使用putString(),putBoolean(),putInt(),putFloat(),putLong()可以保存所需的dtatype。

如何获取

 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); String userName = sharedPref.getString("userName", "Not Available"); 

http://developer.android.com/reference/android/content/SharedPreferences.html

C. 对象序列化

如果我们想要保存一个对象状态来通过networking发送它,或者你也可以使用它,你也可以使用对象serlization。

使用java bean并将其作为其中一个字段存储,并为此使用getter和setter

JavaBeans是具有属性的Java类。 将属性看作私有实例variables。 由于他们是私人的,所以他们可以从课外访问的唯一途径就是通过课堂上的方法。 更改属性值的方法称为setter方法,检索属性值的方法称为getter方法。

 public class VariableStorage implements Serializable { private String inString ; public String getInString() { return inString; } public void setInString(String inString) { this.inString = inString; } } 

通过使用在邮件方法中设置variables

 VariableStorage variableStorage = new VariableStorage(); variableStorage.setInString(inString); 

然后使用对象Serialzation序列化这个对象,并在你的其他类反序列化这个对象。

在序列化过程中,一个对象可以表示为一个包含对象数据的字节序列,以及关于对象types和存储在对象中的数据types的信息。

序列化对象写入文件后,可以从文件中读取并反序列化,即可以使用表示对象及其数据的types信息和字节来重新创build内存中的对象。

如果你想要这个教程,请参考这个链接

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

在其他类中获取variables

D.共同事业

你可以通过自己创build一个能包含你在项目中经常需要的常用数据的类。

样品

 public class CommonUtilities { public static String className = "CommonUtilities"; } 

E. 通过意图传递数据

请参阅本教程以获取传递数据的选项。

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

你不必..

只需从第二个活动调用newIntenet()

 Intent retData=new Intent(); 

添加数据以传回

 putExtras (retData.putExtra("userName", getUsrName())); 

继续使用setResult

 setResult(RESULT_OK, retData); 

然后可以完成

 finish(); 

startActivityForResult()

这里有一个来自SDK的链接和更多的信息:

http://developer.android.com/guide/appendix/faq/commontasks.html#opennewscreen

并向下滚动到“从屏幕返回结果”部分

我经常使用静态setter方法在调用活动中使用静态variables来设置它们。

通过这种方式,我可以随意更改任何活动的价值,而不pipe各种活动之间的确切stream程。

注意,这个技巧只有在你不关心应用程序中同一活动(类)的多个副本的实例化时才能使用,但是我发现这是最容易实现的,而且我最多使用它。

这里最好的办法是把variables放到一个在范围外定义的公共类中

 public class Utils { public static String mPosition; } 

在你的代码(例如OnButtonClick等)

 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); Utils.mPosition = mViewData.mPosition + ""; LogHelper.e(TAG, "before intent: " + Utils.mPosition); startActivityForResult(intent, Keys.PICK_CONTACT); 

里面的代码

@Override public void onActivityResult(int requestCode,int resultCode,Intent data){if(requestCode == Keys.PICK_CONTACT){if(resultCode == Activity.RESULT_OK){Uri contactData = data.getData();

  //you may use the variable here after intent result LogHelper.e(TAG, "after intent: " + Utils.mPosition); ....