【问题标题】:Calling a method in my PreferenceActivity Activity form another Activity在我的 PreferenceActivity Activity 中调用方法形成另一个 Activity
【发布时间】:2013-04-05 14:34:48
【问题描述】:

您好,感谢您的帮助,

我有以下情况。

在我的应用中,我使用 PreferenceActivity 来显示和允许更改设置,我们称之为 PreferenceActivity A

如果用户选择一个特定的偏好,则启动一个新的 Activity,我们称它为 Activity B(A 不会被销毁)。

我需要做的是在Activity B中调用PreferenceActivity A表单的方法。

请注意:PreferenceActivity A 中的方法不能是静态的。

非常感谢任何帮助。

编辑编辑编辑编辑编辑编辑编辑编辑

这是 Activty B 的启动方式: 当用户点击 PreferenceActivity A 屏幕中的对应项目时,就会触发 Intent。

 <PreferenceScreen
        android:key="addstocks"
        android:summary="Click here to add stocks"
        android:title="Add stocks" >
        <intent
            android:targetClass="com.stocktickerwidget.QuotesActivity"
            android:targetPackage="com.stocktickerwidget" />

【问题讨论】:

  • 是否需要向方法传递参数,方法是否需要向调用者返回一些东西?调用此方法的目的是什么(即是否只是为了让用户在返回 Activity A 时看到不同的东西)?
  • @Karakuri 什么都不需要传递。 Activity A 会因为调用该方法而改变外观。
  • 在这种情况下,我建议使用startActivityForResult(),传回结果,然后更改onActivityResult() 的外观。您可能会使用 Handler 和 Messenger,但我认为第一个更简单、更清晰。
  • @Karakuri 抱歉,我无法使用 startActivityForResult(),因为 Activity B 的启动方式与您在编辑后的代码中看到的方式相同。
  • 是的,你可以。在该首选项上设置一个 OnPreferenceClickListener 并自己启动 ActivityB。

标签: android android-activity preferenceactivity


【解决方案1】:

不要像那样启动活动,而是在首选项上手动设置 OnPreferenceClickListener 并使用startActivityForResult()

private static final int RESUEST_CODE = 1;
protected void onCreate() {
    /* ... */
    Preference pref = getPreferenceManager().findPreference("addstocks");
    pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference() {
            if (preference.getKey().equals("addstocks") {
                startActivityB();
                return true;
            }
            return false;
        }
    });
}

private void startActivityB() {
    Intent intent = new Intent(this, ActivityB.class);
    startActivityForResult(intent, REQUEST_CODE);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        // do something here
    }
}

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多