Kullanıcının listede birden fazla öğe seçmesine izin veren bir tercih iletişim penceresi oluşturmaya çalışıyorum. Şu anda sadece bir öğe seçmenize izin veriyor. Bunu yapmanın kolay bir yolu var mı? İnternete baktım ve henüz bir yol görmedim. Herhangi bir yardım takdir edilir!Android'de ListPreference çoklu seçim yapmak için kolay yolu?
cevap
Tercihler, tanıma göre tek değerlerdir. Çok seçenekli bir ListPreference
uygulamak istiyorsanız, bu sınıfı veya android.preference.Preference
alt sınıfını ve kendi uygulamanızı oluşturmanız gerekebilir.
Alternatif olarak, basit bir tercih ekranından bir etkinliği çağırabilir ve her şeyi kendiniz halledebilirsiniz.
Değerleri, bir dize tercihi bir ayırıcıyla veya daha iyisi, çeşitli boole tercihleri olarak kaydedebilirsiniz.
İşte ihtiyacınız olan kod!
Android Api Düzeyli bunu istiyorsun hangi İçinhttp://blog.350nice.com/wp/wp-content/uploads/2009/07/listpreferencemultiselect.java
public class ListPreferenceMultiSelect extends ListPreference {
//Need to make sure the SEPARATOR is unique and weird enough that it doesn't match one of the entries.
//Not using any fancy symbols because this is interpreted as a regex for splitting strings.
private static final String SEPARATOR = "OV=I=XseparatorX=I=VO";
private boolean[] mClickedDialogEntryIndices;
public ListPreferenceMultiSelect(Context context, AttributeSet attrs) {
super(context, attrs);
mClickedDialogEntryIndices = new boolean[getEntries().length];
}
@Override
public void setEntries(CharSequence[] entries) {
super.setEntries(entries);
mClickedDialogEntryIndices = new boolean[entries.length];
}
public ListPreferenceMultiSelect(Context context) {
this(context, null);
}
@Override
protected void onPrepareDialogBuilder(Builder builder) {
CharSequence[] entries = getEntries();
CharSequence[] entryValues = getEntryValues();
if (entries == null || entryValues == null || entries.length != entryValues.length) {
throw new IllegalStateException(
"ListPreference requires an entries array and an entryValues array which are both the same length");
}
restoreCheckedEntries();
builder.setMultiChoiceItems(entries, mClickedDialogEntryIndices,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean val) {
mClickedDialogEntryIndices[which] = val;
}
});
}
public static String[] parseStoredValue(CharSequence val) {
if ("".equals(val))
return null;
else
return ((String)val).split(SEPARATOR);
}
private void restoreCheckedEntries() {
CharSequence[] entryValues = getEntryValues();
String[] vals = parseStoredValue(getValue());
if (vals != null) {
for (int j=0; j<vals.length; j++) {
String val = vals[j].trim();
for (int i=0; i<entryValues.length; i++) {
CharSequence entry = entryValues[i];
if (entry.equals(val)) {
mClickedDialogEntryIndices[i] = true;
break;
}
}
}
}
}
@Override
protected void onDialogClosed(boolean positiveResult) {
// super.onDialogClosed(positiveResult);
CharSequence[] entryValues = getEntryValues();
if (positiveResult && entryValues != null) {
StringBuffer value = new StringBuffer();
for (int i=0; i<entryValues.length; i++) {
if (mClickedDialogEntryIndices[i]) {
value.append(entryValues[i]).append(SEPARATOR);
}
}
if (callChangeListener(value)) {
String val = value.toString();
if (val.length() > 0)
val = val.substring(0, val.length()-SEPARATOR.length());
setValue(val);
}
}
}
}
? API-Seviyesini 11 kullandığınızda
Eğer daha küçük API Seviye 11 kullandığınızda bu MultiSelect Preference for Android 3.0 or higher
Eğer yazı için bu Custom Implementation of MuliiSelect Preference
Teşekkür kullanabilirsiniz kullanabilirsiniz, o bana çok yardımcı oldu. Kullanıcıların tercihlerde gösterilen özeti seçilen değerlerle güncellemelerine izin vermek için sınıfa bazı değişiklikler yaptım.
Bu sayede kullanıcı, Spinner'ı açmadan seçimlerini görebilir.
// Fills the Entry Values List
@Override
public void setEntryValues(CharSequence[] entryValues) {
super.setEntryValues(entryValues);
restoreCheckedEntries();
}
// Updates the Summary
@Override
public void setSummary(CharSequence entries) {
String s = "";
for (int x = 0; x < getEntryValues().length; x++)
if (mClickedDialogEntryIndices[x])
s += (s.equals("") ? "" : ", ") + getEntries()[x];
super.setSummary(s);
}
yöntem setSummary burada SettingsActivity.java içinde adı olmalıdır:
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener
= new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
if (preference instanceof ListPreferenceMultiSelect) {
ListPreferenceMultiSelect listPreference =
(ListPreferenceMultiSelect) preference;
listPreference.setSummary("");
}
return true;
}
};
yöntem setEntryValues setEntries birlikte çağrılabilir
Burada ilave yöntemlerdir.
Benim için çalıştı! Android 2.2 veya üstü ile uyumludur.
- 1. Kolay yolu yapmak için NSCoder etkin sınıf
- 2. checkboxpreference çoklu bağımlılık android veya listpreference bağımlılığı
- 3. Çoklu dizeler için "git grep" yapmanın en kolay yolu?
- 4. Plists birleştirmek için kolay yolu?
- 5. kolay yolu
- 6. kolay yolu
- 7. javafx8 TableView Çoklu seçim,
- 8. Çoklu seçim Vim
- 9. JcomboBox çoklu seçim
- 10. jQuery Çoklu seçim
- 11. UITableView - Çoklu seçim VE tek seçim
- 12. Çoklu seçim soruları için R nasıl kullanılır?
- 13. MySQL Seçim Bildirimi Çoklu Sütunlar için DISTINCT
- 14. jquery çoklu seçim kutusundan değer almak için
- 15. androidde greyview için özel adaptör
- 16. AngularJS çoklu seçim girişlerini filtrele
- 17. Winforms - çoklu seçim açılır menüsü
- 18. js veritabamında çoklu seçim ekleme
- 19. Erlang - Interleave kolay yolu
- 20. Android twitter durumunu göndermek için kolay yolu
- 21. Tüm uygulama için CurrentCulture'ı ayarlamanın kolay yolu?
- 22. sqlalchemy eklemek veya güncellemek için kolay yolu?
- 23. Uygulama boyutlarını bilirken androidde özel görünümler ekleme
- 24. Java Right Click bir seçim yapmıyor. Bunu küresel olarak çözmenin en kolay yolu nedir?
- 25. androidde openssl nasıl kurulur
- 26. ManytoOne ilişkisinden seçim yapmak için gerekli (true) nasıl ayarlanır?
- 27. Bir açılır menüden seçim yapmak için gerekli html 5
- 28. Açısal js çoklu seçim isteğinde değerleri ayarlama
- 29. Bunu yapmak için LINQ'ish yolu nedir
- 30. TypeScript: dize eşitliği yapmak için doğru yolu?