通过意图而不是构造函数传递数据

时间:2009-06-12 17:09:06

标签: android

开发了许多桌面GUI应用程序(从Xt到Qt,Java Awt / Swt / Swing等)我真的觉得很难习惯Android。

假设我有MainView Activity类,它通过intent机制显式调用DetailedView,如下所示:

  • 由于Activity类是通过onCreate()实例化的,我该怎么做 定制吗? (没有构造函数,只有 通过意图传递数据!)

  • 有没有办法获取DetailView实例的引用 MainActivity?

  • 有没有办法获取MainActivity实例的引用 DetailedView?

  • 如何将对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,..);
            ...
        }
    }
    

2 个答案:

答案 0 :(得分:2)

在特定应用的活动/服务之间传递简单数据的一种方法是使用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();
}

答案 1 :(得分:1)

我经常作弊并使用静态'getInstance'调用来在Activities和views之间进行通信。只要他们都处于相同的过程中,这种方法就有效,而且我还没有数据访问失败...但我确信这只是时间问题...如果你正在寻找一个hacky快速修复这可能是它,否则你必须通过意图传递数据。