下面列出了怎么用androidx.preference.PreferenceGroupAdapter的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
@SuppressLint("RestrictedApi")
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
Preference preference = getItem(position);
if (preference instanceof PreferenceCategory) {
setZeroPaddingToLayoutChildren(holder.itemView);
} else {
View iconFrame = holder.itemView.findViewById(R.id.icon_frame);
if (iconFrame != null) {
iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE);
}
}
}
};
}
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@SuppressLint("RestrictedApi")
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
Preference preference = getItem(position);
if (preference instanceof PreferenceCategory)
setZeroPaddingToLayoutChildren(holder.itemView);
else {
View iconFrame = holder.itemView.findViewById(R.id.icon_frame);
if (iconFrame != null) {
iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE);
}
}
}
};
}
@Override
@SuppressLint("RestrictedApi")
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@Override
public void onBindViewHolder(@NonNull PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
Preference preference = getItem(position);
if (preference instanceof PreferenceCategory)
setZeroPaddingToLayoutChildren(holder.itemView);
else {
View iconFrame = holder.itemView.findViewById(R.id.icon_frame);
if (iconFrame != null) {
iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE);
}
}
}
};
}
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@SuppressLint("RestrictedApi")
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
Preference preference = getItem(position);
if (preference instanceof PreferenceCategory)
setZeroPaddingToLayoutChildren(holder.itemView);
else {
View iconFrame = holder.itemView.findViewById(R.id.icon_frame);
if (iconFrame != null) {
iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE);
}
}
}
};
}
@Override protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@SuppressLint("RestrictedApi") @Override public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
Preference preference = getItem(position);
if (preference instanceof PreferenceCategory) {
setZeroPaddingToLayoutChildren(holder.itemView);
} else {
View iconFrame = holder.itemView.findViewById(R.id.icon_frame);
if (iconFrame != null) {
iconFrame.setVisibility(preference.getIcon() == null ? View.GONE : View.VISIBLE);
}
}
}
};
}
@SuppressLint("RestrictedApi")
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@Override
public void onPreferenceHierarchyChange(Preference preference) {
if (preference != null)
setAllPreferencesToAvoidHavingExtraSpace(preference);
super.onPreferenceHierarchyChange(preference);
}
};
}
@Override
protected Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen){
@SuppressLint("RestrictedApi")
public void onPreferenceHierarchyChange(Preference preference){
setAllPreferencesToAvoidHavingExtraSpace(preference);
super.onPreferenceHierarchyChange(preference);
}
};
}
public static int getPreferencePosition(PreferenceGroupAdapter adapter,
Class<? extends Preference> clazz) {
for (int i = 0; i < adapter.getItemCount(); i++) {
if (clazz.isInstance(adapter.getItem(i))) {
return i;
}
}
throw new Resources.NotFoundException();
}
@Before
public void setUp() {
controller = Robolectric.buildActivity(PreferencesActivity.class,
new Intent()
.putExtra(PreferencesActivity.EXTRA_TITLE, R.string.display)
.putExtra(PreferencesActivity.EXTRA_PREFERENCES, R.xml.preferences_display));
activity = controller.create().start().resume().visible().get();
RecyclerView list = activity.findViewById(android.R.id.list_container);
list.setLayoutManager(new LinearLayoutManager(activity));
RecyclerView.Adapter adapter = list.getAdapter();
int position = ShadowSupportPreferenceManager
.getPreferencePosition((PreferenceGroupAdapter) adapter, ThemePreference.class);
RecyclerView.ViewHolder holder = CustomShadows.customShadowOf(adapter).getViewHolder(position);
preferenceView = holder.itemView;
}
@Before
public void setUp() {
controller = Robolectric.buildActivity(PreferencesActivity.class,
new Intent()
.putExtra(PreferencesActivity.EXTRA_TITLE, R.string.display)
.putExtra(PreferencesActivity.EXTRA_PREFERENCES, R.xml.preferences_display));
activity = controller.create().postCreate(null).start().resume().visible().get();
RecyclerView list = activity.findViewById(android.R.id.list_container);
list.setLayoutManager(new LinearLayoutManager(activity));
RecyclerView.Adapter adapter = list.getAdapter();
int position = ShadowSupportPreferenceManager
.getPreferencePosition((PreferenceGroupAdapter) adapter, FontPreference.class);
RecyclerView.ViewHolder holder = CustomShadows.customShadowOf(adapter).getViewHolder(position);
preferenceView = holder.itemView;
}
@Before
public void setUp() {
controller = Robolectric.buildActivity(PreferencesActivity.class,
new Intent()
.putExtra(PreferencesActivity.EXTRA_TITLE, R.string.display)
.putExtra(PreferencesActivity.EXTRA_PREFERENCES, R.xml.preferences_display));
activity = controller.create().postCreate(null).start().resume().visible().get();
RecyclerView list = activity.findViewById(android.R.id.list_container);
list.setLayoutManager(new LinearLayoutManager(activity));
RecyclerView.Adapter adapter = list.getAdapter();
int position = ShadowSupportPreferenceManager
.getPreferencePosition((PreferenceGroupAdapter) adapter, FontSizePreference.class);
RecyclerView.ViewHolder holder = CustomShadows.customShadowOf(adapter).getViewHolder(position);
preferenceView = holder.itemView;
}
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
return new PreferenceGroupAdapter(preferenceScreen) {
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
// Override Equalizer preference attachment to add a long click listener
// and to change the detail text at runtime
String fragment = getItem(position).getFragment();
if ("com.marverenic.music.ui.settings.EqualizerFragment".equals(fragment)) {
ViewGroup itemView = (ViewGroup) holder.itemView;
TextView title = itemView.findViewById(android.R.id.title);
TextView detail = itemView.findViewById(android.R.id.summary);
boolean hasSystemEq = Util.getSystemEqIntent(getContext()) != null;
if (hasSystemEq && Util.hasEqualizer()) {
// If we have Jockey's Equalizer and another Equalizer
itemView.setOnLongClickListener(PreferenceFragment.this);
detail.setText(R.string.equalizer_more_options_detail);
detail.setVisibility(View.VISIBLE);
} else if (hasSystemEq && !Util.hasEqualizer()) {
// If we don't have any equalizers
detail.setText(R.string.equalizer_unsupported);
detail.setVisibility(View.VISIBLE);
itemView.setEnabled(false);
title.setEnabled(false);
detail.setEnabled(false);
}
}
}
};
}
/**
* Return a valid ListView position or -1 if none is found
*/
private int canUseListViewForHighLighting(String key) {
if (getListView() == null) {
return -1;
}
RecyclerView listView = getListView();
RecyclerView.Adapter adapter = listView.getAdapter();
if (adapter != null && adapter instanceof PreferenceGroupAdapter) {
return findListPositionFromKey((PreferenceGroupAdapter) adapter, key);
}
return -1;
}
private int findListPositionFromKey(PreferenceGroupAdapter adapter, String key) {
final int count = adapter.getItemCount();
for (int n = 0; n < count; n++) {
final Preference preference = adapter.getItem(n);
final String preferenceKey = preference.getKey();
if (preferenceKey != null && preferenceKey.equals(key)) {
return n;
}
}
return -1;
}