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

     2023-04-19     236

关键词:

【中文标题】如何将值从一个活动传递到上一个活动【英文标题】:How to pass the values from one activity to previous activity 【发布时间】:2010-11-10 14:33:23 【问题描述】:

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

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

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

【问题讨论】:

Sending data back to the Main Activity in Android的可能重复 How do I pass data between Activities in Android application?的可能重复 【参考方案1】:

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

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

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

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

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

最后一步是调用 Activity:覆盖 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; 
     
   
 

【讨论】:

这一切都对我有用,除了 new Intent(null);“太模糊”,我不得不将其更改为 new Intent(); 同样值得注意的是,这只会在相同的上下文中起作用。例如,如果您从片段开始活动,它将无法工作,因为请求代码每次都会不同。您需要在片段中使用 getActivity().startActivityForResult()。 Reto - 你介意看看我最近关于类似情况的问题吗?【参考方案2】:

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

A.数据库

B.共享偏好。

C.对象序列化。

D.可以保存公共数据的类可以命名为 Common Utilities,这取决于您。

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

这取决于您的项目需求。

A. 数据库

SQLite 是一个嵌入到 Android 中的开源数据库。 SQLite 支持标准的关系数据库功能,如 SQL 语法、事务和准备好的语句。

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

B. 共享偏好

假设您要存储用户名。所以现在会有两个东西一个Key用户名,ValueValue。

如何储存

 // 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() 可以保存所需的数据类型。

如何获取

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

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

C. 对象序列化

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

使用 java bean 并将其存储为他的字段之一,并为此使用 getter 和 setter

JavaBean 是具有属性的 Java 类。考虑到 属性作为私有实例变量。既然他们是私人的,唯一的办法 可以通过类中的方法从类外部访问它们。这 改变属性值的方法称为 setter 方法,而这些方法 检索属性值的方法称为 getter 方法。

public class VariableStorage implements Serializable  

    private String inString ;

    public String getInString() 
        return inString;
    

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



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

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

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

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

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

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

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

Get variable in other classes

D. CommonUtilities

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

示例

public class CommonUtilities 

    public static String className = "CommonUtilities";


E. 通过 Intent 传递数据

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

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

【讨论】:

【参考方案3】:

你不必...

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

Intent retData=new Intent();

添加要传回的数据

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

继续使用 setResult

setResult(RESULT_OK, retData);

然后就可以结束了

finish();

【讨论】:

【参考方案4】:

startActivityForResult()

这里是来自 SDK 的链接,其中包含更多信息:

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

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

【讨论】:

【参考方案5】:

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

通过这种方式,我可以随意更改任何活动中的值,而无需考虑各种活动之间的确切控制流。

请注意,只有在您不关心 在应用程序中实例化多个相同活动(类)的副本, 但我发现这是最容易实现的,而且我用得最多。

【讨论】:

不是一个很好的解决方案。这违背了 Android 的最佳实践。你不能保证一个活动不会被杀死并且系统会启动一个新实例。【参考方案6】:

这里最好的方法是把变量放到一个在作用域外定义的公共类中

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);

里面的代码

@覆盖 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);
....

【讨论】:

如何将值从动态列表视图传递到活动?

】如何将值从动态列表视图传递到活动?【英文标题】:Howtopassvaluefromdynamiclistviewtoactivity?【发布时间】:2016-03-0117:53:59【问题描述】:我是android新手,我创建了一个简单的listview,它从mysql获取数据并且一切正常,但现在我想... 查看详情

通过 AsyncTask 将值从第一个活动传递到第三个活动

】通过AsyncTask将值从第一个活动传递到第三个活动【英文标题】:PassValuefromFirstActivitytoThirdActivityviaAsyncTask【发布时间】:2017-06-1416:11:28【问题描述】:我有一个在线订购系统,用户至少可以通过三个步骤完成订购。以下每个步... 查看详情

如何将值从其他活动传递给 viewpager 片段?

】如何将值从其他活动传递给viewpager片段?【英文标题】:Howtopassvaluetoviewpagerfragmentfromotheractivity?【发布时间】:2016-04-2411:13:09【问题描述】:在这里让我解释一下我的要求,我有两个viewpager选项卡,即任务和调用。任务片段中... 查看详情

如何将值从片段/活动传递到 xml?

】如何将值从片段/活动传递到xml?【英文标题】:Howtopassvaluefromafragment/activitytoxml?【发布时间】:2022-01-0403:51:29【问题描述】:所以我知道可以在活动和片段之间使用intent传递数据,但是有没有办法将值传递给某些XML文件?说... 查看详情

如何将值从服务传输到活动?

】如何将值从服务传输到活动?【英文标题】:HowtotransmitavaluefromServicetoActivity?【发布时间】:2013-10-2308:50:30【问题描述】:我正在开发一个应用程序,我必须连接到Android4.3上的蓝牙设备。我有两个java文件,一个是DeviceControlexte... 查看详情

将值从 ListView 传递到 EditText

】将值从ListView传递到EditText【英文标题】:PassValuefromListViewToEditText【发布时间】:2015-02-0315:54:19【问题描述】:我得到一个活动,其中一个有3个可点击的EditTexts,它们是3个不同的SearchablesListViewswithMatchCodebyButtonClick开始一个新... 查看详情

如何将值从活动传递到 Android Studio 中的类?

】如何将值从活动传递到AndroidStudio中的类?【英文标题】:HowdoyoupassvaluesfromanactivitytoaclassinAndroidStudio?【发布时间】:2021-07-2221:28:54【问题描述】:我正在尝试设置删除按钮以从表中删除客户。客户使用回收站视图显示在卡片视... 查看详情

如何将值从我的异步任务发送到另一个新活动?

】如何将值从我的异步任务发送到另一个新活动?【英文标题】:Howdoisendavaluefrommyasynctasktoanothernewactivity?【发布时间】:2017-08-1818:10:36【问题描述】:我在我的异步任务中调用convertResponseToString但是我也有一个按钮,我如何让log... 查看详情

java示例代码_将值从父活动传递到子活动,并在子活动退出时刷新父活动

java示例代码_将值从父活动传递到子活动,并在子活动退出时刷新父活动 查看详情

将值从一项活动更新到另一项活动

】将值从一项活动更新到另一项活动【英文标题】:Updatevaluesfromoneactivitytoanother【发布时间】:2016-02-0316:39:50【问题描述】:我有一个包含列表的活动(类似于fb或instagram提要),我有喜欢该项目的按钮,它还显示喜欢的数量。... 查看详情

无法将值从一个意图传递到另一个意图

】无法将值从一个意图传递到另一个意图【英文标题】:Can\'tpassvaluesfromoneintenttoanother【发布时间】:2015-07-1114:02:33【问题描述】:这是我将值传递给名为choice的类的主要活动。@OverridepublicvoidonClick(Viewv)//TODOAuto-generatedmethodstubStri... 查看详情

在 Kotlin 中将值从 Activity 传递到 Fragment

】在Kotlin中将值从Activity传递到Fragment【英文标题】:PassingavaluefromActivitytoFragmentinKotlin【发布时间】:2019-05-2615:27:50【问题描述】:我在我的项目中创建了一个底部导航活动,其中包含一个活动和两个片段。在主活动中,我将值... 查看详情

如何将值从基本适配器传递到 Android 中的 Activity

】如何将值从基本适配器传递到Android中的Activity【英文标题】:HowtopassvaluefrombaseadaptertoActivityinAndroid【发布时间】:2015-12-1216:20:45【问题描述】:我在可展开的列表视图标题中添加了一个按钮。单击按钮时,我需要将值从适配器... 查看详情

如何将整数从一个活动传递到另一个活动?

】如何将整数从一个活动传递到另一个活动?【英文标题】:HowtopassintegerfromoneActivitytoanother?【发布时间】:2011-10-2719:05:03【问题描述】:我想将一个整数的新值从一个活动传递到另一个活动。即:活动B包含一个integer[]pics=R.drawa... 查看详情

将值从一个表单发送到另一个表单

】将值从一个表单发送到另一个表单【英文标题】:Sendvaluesfromoneformtoanotherform【发布时间】:2010-12-0607:07:15【问题描述】:我想在两个表单(c#)之间传递值。我该怎么做?我有两种表格:Form1和Form2。Form1包含一个按钮。当我单击... 查看详情

如何使用活动显示的片段转到上一个活动

】如何使用活动显示的片段转到上一个活动【英文标题】:HowcanIgotopreviousactivitywiththefragmenttheactivitywasshowing【发布时间】:2014-10-2023:28:37【问题描述】:我有两个活动,活动A和活动B。现在活动A有3个Fragments,其中一个启动活动B... 查看详情

如何将值从一个片段的回收器视图项传递到另一个片段

】如何将值从一个片段的回收器视图项传递到另一个片段【英文标题】:howtopassvaluesfromrecyclerviewitemofonefragmenttoanotherfragment【发布时间】:2017-10-1306:58:06【问题描述】:我很难理解如何将值从一个片段传递到另一个片段。I\'vecreat... 查看详情

java示例代码_如何将值从一个类传递到另一个类

java示例代码_如何将值从一个类传递到另一个类 查看详情