通过意图而不是构造函数传递数据
Posted
技术标签:
【中文标题】通过意图而不是构造函数传递数据【英文标题】:Passing data through intents instead of constructors 【发布时间】:2010-11-02 12:53:53 【问题描述】:开发了许多桌面 GUI 应用程序(从 Xt 到 Qt、Java Awt/Swt/Swing 等),我真的很难适应 android。
假设我有 MainView Activity 类,它通过意图机制显式调用DetailedView,如下所示:
由于 Activity 类是通过 onCreate() 实例化的,我该如何 定制它? (没有构造函数,只有 通过意图传递数据!)
有没有办法在 主活动?
有没有办法获取 MainActivity 实例的引用 详细查看?
如何将 FrontEnd 的引用传递给DetailedView 类? Intent.putExtras() 只允许 某些数据类型传递给 意图接收器类。
MainActivity
...
FrontEnd fe;
...
public void onCreate(Bundle savedInstanceState)
...
Intent myIntent = new Intent(this, DetailedView.class);
...
protected void onListItemClick(ListView l, View v, int position, long id)
...
startActivityForResult(myIntent,..);
...
【问题讨论】:
【参考方案1】:在特定应用的活动/服务之间传递简单数据的一种方法是使用 android 的 SharedPreferences 功能。
这可能不是完成工作的最优雅的代码,但我经常在我的 Android 项目中创建一个静态“实用程序”类,以允许通过共享首选项进行 1 行获取和一组简单数据类型
private static final String PREFERENCE_FILE_NAME = "com.snctln.util.test.SharedPreferencesFile";
private static final String BOOL_VALUE_ONE = "bValueOne";
public static boolean getBooleanValue1(Context context)
SharedPreferences prefs = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
return prefs.getBoolean(BOOL_VALUE_ONE, true); // return true if the value does not exist
public static void setBooleanValue1(Context context, int appWidgetId, boolean actualvalue)
SharedPreferences.Editor prefs = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE).edit();
prefs.putBoolean(BOOL_VALUE_ONE, actualvalue);
prefs.commit();
【讨论】:
【参考方案2】:我经常作弊并使用静态“getInstance”调用在活动和视图之间进行通信。只要它们都在同一个过程中,它就可以工作,而且我还没有出现数据访问失败......但我相信这只是时间问题......如果你正在寻找一个 hacky可以快速解决这个问题,否则您必须通过意图传递数据。
【讨论】:
以上是关于通过意图而不是构造函数传递数据的主要内容,如果未能解决你的问题,请参考以下文章