下面列出了怎么用android.preference.PreferenceActivity的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(android.R.color.transparent));
final String preference;
try {
preference = getIntent().getStringExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT);
} catch (final Exception e) {
e.printStackTrace();
return;
}
if (preference.equals(SPVPreferenceFragment.class.getName()))
fragment = new SPVPreferenceFragment();
else if (preference.equals(PinPreferenceFragment.class.getName()))
fragment = new PinPreferenceFragment();
else
fragment = new GeneralPreferenceFragment();
getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit();
}
public SettingsElements(final PreferenceActivity activity, boolean firstRun)
{
this.activity = activity;
setPrefs();
if (firstRun)
{
loadFactoryDefaults();
} else
{
loadSavedDefaults();
}
setPrefValues();
setPrefListeners();
}
@Override
public void setListAdapter(ListAdapter adapter) {
if (adapter == null) {
super.setListAdapter(null);
} else {
List<Header> headers = null;
try {
Method method = PreferenceActivity.class.getDeclaredMethod("getHeaders");
method.setAccessible(true);
headers = (List<Header>) method.invoke(this);
} catch (Exception e) {
e.printStackTrace();
}
super.setListAdapter(new HeaderAdapter(this, headers));
}
}
/** Taps the specified preference displayed by the provided Activity. */
@FixWhenMinSdkVersion(11)
@SuppressWarnings("deprecation")
public static void tapPreference(PreferenceActivity activity, Preference preference) {
// IMPLEMENTATION NOTE: There's no obvious way to find out which View corresponds to the
// preference because the Preference list in the adapter is flattened, whereas the View
// hierarchy in the ListView is not.
// Thus, we go for the Reflection-based invocation of Preference.performClick() which is as
// close to the invocation stack of a normal tap as it gets.
// Only perform the click if the preference is in the adapter to catch cases where the
// preference is not part of the PreferenceActivity for some reason.
ListView listView = activity.getListView();
ListAdapter listAdapter = listView.getAdapter();
for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
if (listAdapter.getItem(i) == preference) {
invokePreferencePerformClickOnMainThread(preference, activity.getPreferenceScreen());
return;
}
}
throw new IllegalArgumentException("Preference " + preference + " not in list");
}
@Override
public void setListAdapter(ListAdapter adapter) {
if (adapter == null) {
super.setListAdapter(null);
} else {
List<Header> headers = null;
try {
Method method = PreferenceActivity.class.getDeclaredMethod("getHeaders");
method.setAccessible(true);
headers = (List<Header>) method.invoke(this);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
e.printStackTrace();
}
super.setListAdapter(new HeaderAdapter(this, headers));
}
}
public static Intent createAppOpsIntent(String packageName)
{
final Intent intent = new Intent();
intent.setClassName(AppOpsActivity.class.getPackage().getName(),
AppOpsActivity.class.getName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
if(packageName != null)
{
final Bundle args = new Bundle();
args.putString(AppOpsDetails.ARG_PACKAGE_NAME, packageName);
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, AppOpsDetails.class.getName());
}
return intent;
}
@Override
public void onItemSelected(final AdapterView<?> parent, final View view, final int pos,
final long id) {
final LocaleRenderer locale = (LocaleRenderer)parent.getItemAtPosition(pos);
if (locale.isMoreLanguages()) {
PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity();
preferenceActivity.startPreferenceFragment(new UserDictionaryLocalePicker(), true);
} else {
mContents.updateLocale(locale.getLocaleString());
}
}
@Override
public void setListAdapter(ListAdapter adapter) {
if (adapter == null) {
super.setListAdapter(null);
return;
}
int count = adapter.getCount();
List<PreferenceActivity.Header> headers = new ArrayList<>(count);
for (int i = 0; i < count; ++i) {
headers.add((PreferenceActivity.Header) adapter.getItem(i));
}
super.setListAdapter(new HeaderAdapter(this, headers, R.layout.item_preference_header, true));
}
private HeaderAdapter(Context context, List<PreferenceActivity.Header> objects, int layoutResId,
boolean removeIconBehavior) {
super(context, 0, objects);
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mLayoutResId = layoutResId;
mRemoveIconIfEmpty = removeIconBehavior;
}
@Override
public void onItemSelected(final AdapterView<?> parent, final View view, final int pos,
final long id) {
final LocaleRenderer locale = (LocaleRenderer)parent.getItemAtPosition(pos);
if (locale.isMoreLanguages()) {
PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity();
preferenceActivity.startPreferenceFragment(new UserDictionaryLocalePicker(), true);
} else {
mContents.updateLocale(locale.getLocaleString());
}
}
@Test
public void dataInteractionSample() {
openDrawer();
onView(allOf(withId(R.id.design_menu_item_text),
withText(R.string.settings_title))).perform(click());
// Start of the flow as shown on Figure 1-8.
onData(instanceOf(PreferenceActivity.Header.class))
.inAdapterView(withId(android.R.id.list))
.atPosition(0)
.onChildView(withId(android.R.id.title))
.check(matches(withText("General")))
.perform(click());
onData(withKey("email_edit_text"))
/*we have to point explicitly what is the parent of of the General prefs list
because there are two {@ListView}s with the same id - android.R.id.list in the hierarchy*/
.inAdapterView(allOf(withId(android.R.id.list), withParent(withId(android.R.id.list_container))))
.check(matches(isDisplayed()))
.perform(click());
onView(withId(android.R.id.edit)).perform(replaceText("[email protected]"));
onView(withId(android.R.id.button1)).perform(click());
// Verify new email is shown.
onData(withKey("email_edit_text"))
.inAdapterView(allOf(withId(android.R.id.list), withParent(withId(android.R.id.list_container))))
.onChildView(withId(android.R.id.summary))
.check(matches(withText("[email protected]")));
}
@Override
public void onItemSelected(final AdapterView<?> parent, final View view, final int pos,
final long id) {
final LocaleRenderer locale = (LocaleRenderer)parent.getItemAtPosition(pos);
if (locale.isMoreLanguages()) {
PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity();
preferenceActivity.startPreferenceFragment(new UserDictionaryLocalePicker(), true);
} else {
mContents.updateLocale(locale.getLocaleString());
}
}
/**
* Handle options menu
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
// Do the same thing as the back button.
onBackPressed();
return true;
} else if (id == R.id.action_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, SettingsActivity.SlideshowPreferenceFragment.class.getName());
intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true);
startActivity(intent);
return true;
} else if (id == R.id.action_credits) {
startActivity(new Intent(this, CreditsActivity.class));
return true;
} else if (id == R.id.action_change_log) {
showChangeLog(true);
return true;
} else if (id == R.id.action_controls) {
new ControlsDialog().show(getSupportFragmentManager(), ControlsDialog.TAG);
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* {@inheritDoc}
*/
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onBuildHeaders(List<PreferenceActivity.Header> target)
{
loadHeadersFromResource(R.xml.pref_headers, target);
}
protected void launchSettings(
Class<? extends PreferenceActivity> settingsClass) {
handleClose();
Intent intent = new Intent();
intent.setClass(LatinIME.this, settingsClass);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notifications);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
ImageButton imageButton = (ImageButton) toolbar.findViewById(R.id.notifications_settings_button);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(NotificationsActivity.this, SettingsActivity.class);
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, SettingsActivity.NotificationPreferenceFragment.class.getName());
intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true);
startActivity(intent);
}
});
}
protected void showGeneralSettings()
{
Intent settingsIntent = new Intent(this, SuntimesSettingsActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
settingsIntent.putExtra( PreferenceActivity.EXTRA_SHOW_FRAGMENT, SuntimesSettingsActivity.GeneralPrefsFragment.class.getName() );
settingsIntent.putExtra( PreferenceActivity.EXTRA_NO_HEADERS, true );
} else {
settingsIntent.setAction(SuntimesSettingsActivity.ACTION_PREFS_GENERAL);
}
startActivity(settingsIntent);
overridePendingTransition(R.anim.transition_next_in, R.anim.transition_next_out);
}
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = getActivity();
context = activity.getApplicationContext();
resources = context.getResources();
getPreferenceManager().setSharedPreferencesMode(
Context.MODE_WORLD_READABLE);
// If we are on a tablet
isLarge = ((PreferenceActivity) activity).onIsMultiPane();
ActionBar ab = activity.getActionBar();
if (ab != null) {
if (!isLarge) {
ab.setDisplayHomeAsUpEnabled(true);
}
else
ab.setTitle(R.string.app_name);
}
String whichSettings = getArguments().getString("settings");
int prefsType = getPrefsType(whichSettings);
addPreferencesFromResource(prefsType);
prefs = PreferenceManager.getDefaultSharedPreferences(context);
appLocaleManager = new AppLocaleManager(context);
appLocaleManager.initialize();
}
@Override
public void onItemSelected(final AdapterView<?> parent, final View view, final int pos,
final long id) {
final LocaleRenderer locale = (LocaleRenderer)parent.getItemAtPosition(pos);
if (locale.isMoreLanguages()) {
PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity();
preferenceActivity.startPreferenceFragment(new UserDictionaryLocalePicker(), true);
} else {
mContents.updateLocale(locale.getLocaleString());
}
}
@Override
public void setListAdapter(ListAdapter adapter) {
if (adapter == null) {
super.setListAdapter(null);
return;
}
int count = adapter.getCount();
List<PreferenceActivity.Header> headers = new ArrayList<>(count);
for (int i = 0; i < count; ++i) {
headers.add((PreferenceActivity.Header) adapter.getItem(i));
}
super.setListAdapter(new HeaderAdapter(this, headers, R.layout.item_preference_header, true));
}
private HeaderAdapter(Context context, List<PreferenceActivity.Header> objects, int layoutResId,
boolean removeIconBehavior) {
super(context, 0, objects);
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mLayoutResId = layoutResId;
mRemoveIconIfEmpty = removeIconBehavior;
}
private void startApplicationDetailsActivity() {
// start new fragment to display extended information
Bundle args = new Bundle();
args.putString(AppOpsDetails.ARG_PACKAGE_NAME, mCurrentPkgName);
PreferenceActivity pa = (PreferenceActivity)getActivity();
pa.startPreferencePanel(AppOpsDetails.class.getName(), args,
R.string.app_ops_settings, null, this, RESULT_APP_DETAILS);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
{
final Bundle args = new Bundle();
args.putString(AppOpsDetails.ARG_PACKAGE_NAME, ((ViewHolder) v.getTag()).packageName);
final Fragment f = new AppOpsDetails();
f.setArguments(args);
((PreferenceActivity) getActivity()).startPreferenceFragment(f, true);
}
@SuppressWarnings("deprecation")
public static void addPreferencesFromResource(PreferenceActivity activity, int preferencesResId) {
activity.addPreferencesFromResource(preferencesResId);
}
@SuppressWarnings("deprecation")
public static Preference findPreference(PreferenceActivity activity, CharSequence key) {
return activity.findPreference(key);
}
@Override
public void onBuildHeaders(List<PreferenceActivity.Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
}
/**
* {@inheritDoc}
*/
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onBuildHeaders(List<PreferenceActivity.Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
}
public ViewFinder(PreferenceActivity preferenceActivity) {
this.preferenceActivity = preferenceActivity;
this.activity = preferenceActivity;
}
public static void inject(PreferenceActivity preferenceActivity) {
injectObject(preferenceActivity, new ViewFinder(preferenceActivity));
}
public static void inject(Object handler, PreferenceActivity preferenceActivity) {
injectObject(handler, new ViewFinder(preferenceActivity));
}