Использование лямбда-выражения
db.Categories
.GroupJoin(
db.Products,
Category => Category.CategoryId,
Product => Product.CategoryId,
(x, y) => new { Category = x, Products = y })
.SelectMany(
xy => xy.Products.DefaultIfEmpty(),
(x, y) => new { Category = x.Category, Product = y })
.Select(s => new
{
CategoryName = s.Category.Name,
ProductName = s.Product.Name
})
Есть способы сделать это более универсальным решением, если это соответствует вашим потребностям.
Например, если вы хотите, чтобы в общем случае все предпочтения списка отображали свой выбор в виде сводки, вы можете использовать это для своей реализации onSharedPreferenceChanged
:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference pref = findPreference(key);
if (pref instanceof ListPreference) {
ListPreference listPref = (ListPreference) pref;
pref.setSummary(listPref.getEntry());
}
}
Это легко расширяемо для других классов предпочтений.
А используя функции getPreferenceCount
и getPreference
в PreferenceScreen
и PreferenceCategory
, вы можете легко написать универсальную функцию для обхода дерево предпочтений, устанавливающее сводку всех предпочтений нужных вам типов для их представления toString
Спасибо, Рето, за подробное объяснение!
Если это кому-то поможет, мне пришлось изменить код, предложенный Рето Майером, чтобы он работал с SDK для Android 1.5
@Override
protected void onResume() {
super.onResume();
// Setup the initial values
mListPreference.setSummary("Current value is " + mListPreference.getEntry().toString());
// Set up a listener whenever a key changes
...
}
То же самое изменение относится к функции обратного вызова onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
Будьте здоровы,
Chris
Согласно документы Android можно использовать app:useSimpleSummaryProvider="true"
в компонентах ListPreference и EditTextPreference.