如何将值从一个活动传递到上一个活动

Kum*_*mar 94 android android-activity

如何将值从一个屏幕传递到其上一个屏幕?

考虑这种情况:我有两个活动.第一个屏幕有一个TextView按钮,第二个活动有一个EditText按钮.

如果我单击第一个按钮,则必须移至第二个活动,此处用户必须在文本框中键入内容.如果他按下第二个屏幕上的按钮,则文本框中的值应移至第一个活动,并应显示在第一个活动中TextView.

Ret*_*ier 231

捕获在另一个Activity中执行的操作需要三个步骤.

通过使用startActivityForResult主Activity,启动辅助活动(您的"编辑文本"活动)作为子活动.

Intent i = new Intent(this,TextEntryActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);
Run Code Online (Sandbox Code Playgroud)

在子活动中,不是在用户单击按钮时关闭活动,而是需要创建新的Intent并在其extras包中包含输入的文本值.setResult在调用finish关闭辅助Activity 之前将其传递回父调用.

Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();
Run Code Online (Sandbox Code Playgroud)

最后一步是在调用Activity:Override onActivityResult来监听文本条目Activity中的回调.从返回的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; 
    } 
  } 
} 
Run Code Online (Sandbox Code Playgroud)

  • 除了`new Intent(null)之外,这一切都对我有用;`是"太模糊"了,我不得不把它改成`new Intent();`. (27认同)

Nik*_*wal 10

您可以通过多种方式访问​​其他类或Activity中的变量或对象.

A.数据库

B.共享偏好.

C.对象序列化.

D.可以保存公共数据的类可以命名为依赖于您的Common Utilities.

E.通过Intents和Parcelable Interface传递数据.

这取决于您的项目需求.

A. 数据库

SQLite是一个嵌入到Android中的开源数据库.SQLite支持标准的关系数据库功能,如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();
Run Code Online (Sandbox Code Playgroud)

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

如何获取

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");
Run Code Online (Sandbox Code Playgroud)

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

C. 对象序列化

如果我们想要保存对象状态以通过网络发送它,或者您也可以将它用于您的目的,则使用对象serlization.

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

JavaBeans是具有属性的Java类.将属性视为私有实例变量.由于它们是私有的,因此可以通过类中的方法从类外部访问它们.更改属性值的方法称为setter方法,而检索属性值的方法称为getter方法.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}
Run Code Online (Sandbox Code Playgroud)

使用在邮件方法中设置变量

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);
Run Code Online (Sandbox Code Playgroud)

然后使用对象序列化来序列化此对象,并在其他类中反序列化此对象.

在序列化中,对象可以表示为包含对象数据的字节序列,以及有关对象类型和对象中存储的数据类型的信息.

将序列化对象写入文件后,可以从文件中读取并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象.

如果您想要这方面的教程,请参阅此链接

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

在其他类中获取变量

D. CommonUtilities

您可以自己创建一个类,它可以包含您在项目中经常需要的常用数据.

样品

public class CommonUtilities {

    public static String className = "CommonUtilities";

}
Run Code Online (Sandbox Code Playgroud)

E. 通过意图传递数据

有关传递数据的此选项,请参阅本教程.

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


小智 5

你没必要..

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

Intent retData=new Intent();
Run Code Online (Sandbox Code Playgroud)

添加数据以传回

putExtras (retData.putExtra("userName", getUsrName()));
Run Code Online (Sandbox Code Playgroud)

继续使用setResult

setResult(RESULT_OK, retData);
Run Code Online (Sandbox Code Playgroud)

然后可以完成

finish();
Run Code Online (Sandbox Code Playgroud)