Если вы посмотрите на PreferenceActivity.java в исходном коде платформы здесь в строке 1000, вы увидите, что ваше намерение вызывается через startActivity startActivity(header.intent);
, а не через startActivityForResult, поэтому я не думаю, чтоэто возможно.
Однако вы можете попробовать переопределить функцию onHeaderClick
вместе с onActivityResult
PreferenceActivity и посмотреть, что произойдет.Я сам не пробовал, поэтому не знаю, и есть большая вероятность, что этот подход будет нарушен в будущих версиях.
Но, возможно, есть другой подход, который может работать для вас.Как я вижу из вашего справочного вопроса, вы запускаете действие через намерение.Если это действие предназначено для редактирования настроек, то это НЕ правильный подход, так как Android использует это намерение только для запуска действия и ничего более.На мой взгляд, лучше создать свою конкретную активность предпочтений, расширив любую из доступных, чтобы настроить ее.Вот моя настраиваемая ListPreference, которую я использую для того, чтобы пользователь мог выбрать приложение:
public class CustomSelectAppPreference extends ListPreference {
//----- Constructor -----
public CustomSelectAppPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
//----- Constructor END -----
//----- Public Code -----
public void SetResult(String packageName) {
if(this.callChangeListener(packageName)) {
Editor edit = this.getSharedPreferences().edit();
edit.putString(this.getKey(), packageName);
edit.commit();
}
this.getDialog().dismiss();
}
//----- Public Code END -----
//----- ListPreference Overrides -----
@Override
protected void onPrepareDialogBuilder(Builder builder) {
Log.d("CustomSelectAppPreference", "onPrepareDialogBuilder");
super.onPrepareDialogBuilder(builder);
String selectedPackage = this.getSharedPreferences().getString(this.getKey(), "");
ListAdapter listAdapter = (ListAdapter) new ApplicationsArrayAdapter(this.getContext(), Utilities.getInstalledApplications(this.getContext(), selectedPackage), this);
builder.setAdapter(listAdapter, this);
}
//----- ListPreference Overrides END -----
}
И я использую его в моих предпочтениях.xml следующим образом:
<PreferenceScreen android:key="connection_screen"
android:title="@string/wpref_Connection_Screen_title"
android:summary="@string/wpref_Connection_Screen_summary"
android:shouldDisableView="true">
<com.test.app.CustomSelectAppPreference android:key="userSelectedApplication"
android:title="@string/wpref_userSelectedApplication_title"
android:summary="@string/wpref_userSelectedApplication_summary"
android:dialogTitle="@string/userselectedApplication_dialogTitle"
android:entries="@array/selectedapps_dummy_actions"
android:entryValues="@array/selectedapps_dummy_actionsvalues"
android:defaultValue=""
android:shouldDisableView="true"/>
</PreferenceScreen>
ByИспользуя этот подход, я могу контролировать все, что мой пользователь делает в этом упражнении, не нарушая правил Android о предпочтениях.
Надеюсь, это поможет.