Kontrol kutusu öğeleriyle birlikte spinner mümkün mü?Onay kutusu öğeleriyle birlikte spinner mümkün mü?
cevap
Ne demek istediğine bağlı.
Gerçek bir çoklu seçim için Spinner
isterseniz, bunun için Android'de yerleşik hiçbir şey yoktur.
Radyo düğmesi dışında, aşağı açılır listenin Spinner
satırında ne olup bittiğini kontrol edeceğinizi unutmayın. Satırlara onay kutularını koymak isterseniz, konuğum ol. Garip görünecek, dokunma olaylarıyla ilgili olarak düzgün çalışmayabilir, radyo düğmelerini (AFAIK) çıkarmayacak ve Spinner
'un içeriği normal modda tamamen ilgisiz olacaktır. Bu yüzden, bu yaklaşımı tavsiye edemiyorum, ancak yapılabilir.
Spinner
kaynak koduna Android açık kaynak kodundan ulaşabilirsiniz, bu sayede kopyalamak ve MultiSelectSpinner
veya başka bir şey geliştirmek için bekliyoruz.
Sadece bir listView onay kutuları ile oluşturabilirsiniz. Bir diyaloğa bile ekleyebilirsiniz. Bu aslında tüm bir spinner.
Güzel fikir! Teşekkürler! –
Sen multiSpinner kullanabilirsiniz: Sonra
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.util.AttributeSet;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class MultiSpinner extends Spinner implements OnMultiChoiceClickListener, OnCancelListener {
private List<String> items;
private boolean[] selected;
private String defaultText;
private MultiSpinnerListener listener;
public MultiSpinner(Context context) {
super(context);
}
public MultiSpinner(Context arg0, AttributeSet arg1) {
super(arg0, arg1);
}
public MultiSpinner(Context arg0, AttributeSet arg1, int arg2) {
super(arg0, arg1, arg2);
}
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked)
selected[which] = true;
else
selected[which] = false;
}
@Override
public void onCancel(DialogInterface dialog) {
// refresh text on spinner
StringBuffer spinnerBuffer = new StringBuffer();
boolean someUnselected = false;
for (int i = 0; i < items.size(); i++) {
if (selected[i] == true) {
spinnerBuffer.append(items.get(i));
spinnerBuffer.append(", ");
} else {
someUnselected = true;
}
}
String spinnerText;
if (someUnselected) {
spinnerText = spinnerBuffer.toString();
if (spinnerText.length() > 2)
spinnerText = spinnerText.substring(0, spinnerText.length() - 2);
} else {
spinnerText = defaultText;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),
android.R.layout.simple_spinner_item,
new String[] { spinnerText });
setAdapter(adapter);
listener.onItemsSelected(selected);
}
@Override
public boolean performClick() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setMultiChoiceItems(
items.toArray(new CharSequence[items.size()]), selected, this);
builder.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setOnCancelListener(this);
builder.show();
return true;
}
public void setItems(List<String> items, String allText,
MultiSpinnerListener listener) {
this.items = items;
this.defaultText = allText;
this.listener = listener;
// all selected by default
selected = new boolean[items.size()];
for (int i = 0; i < selected.length; i++)
selected[i] = true;
// all text on the spinner
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),
android.R.layout.simple_spinner_item, new String[] { allText });
setAdapter(adapter);
}
public interface MultiSpinnerListener {
public void onItemsSelected(boolean[] selected);
}
}
Ve düzen .xml içinde:
<xxx.xx.gui.MultiSpinner android:id="@+id/SpinnerCollegues"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/university"/>
bu
<selva.spinner.multispinner android:id="@+id/multi_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
Spinner1Activity.javadeneyin Seçilen neyin multispinner.java
package selva.spinner;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.util.AttributeSet;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class multispinner extends Spinner implements
OnMultiChoiceClickListener, OnCancelListener
{
private List<String> listitems;
private boolean[] checked;
public multispinner(Context context)
{
super(context);
}
public multispinner(Context arg0, AttributeSet arg1)
{
super(arg0, arg1);
}
public multispinner(Context arg0, AttributeSet arg1, int arg2)
{
super(arg0, arg1, arg2);
}
@Override
public void onClick(DialogInterface dialog, int ans, boolean isChecked)
{
if (isChecked)
checked[ans] = true;
else
checked[ans] = false;
}
@Override
public void onCancel(DialogInterface dialog)
{
String str="Selected values are: ";
for (int i = 0; i < listitems.size(); i++)
{
if (checked[i] == true)
{
str=str+" "+listitems.get(i);
}
}
AlertDialog.Builder alert1 = new AlertDialog.Builder(getContext());
alert1.setTitle("Items:");
alert1.setMessage(str);
alert1.setPositiveButton("Ok", null);
alert1.show();
}
@Override
public boolean performClick()
{
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setMultiChoiceItems(
listitems.toArray(new CharSequence[listitems.size()]), checked, this);
builder.setPositiveButton("done",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.cancel();
}
});
builder.setOnCancelListener(this);
builder.show();
return true;
}
public void setItems(List<String> items, String allText,
multispinnerListener listener)
{
this.listitems = items;
checked = new boolean[items.size()];
for (int i = 0; i < checked.length; i++)
checked[i] =false;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),
android.R.layout.simple_spinner_item, new String[] { allText });
setAdapter(adapter);
}
public interface multispinnerListener
{
public void onItemschecked(boolean[] checked);
}
}
package selva.spinner;
import java.util.ArrayList;
import java.util.List;
import selva.spinner.multispinner.multispinnerListener;
import android.app.Activity;
import android.os.Bundle;
public class Spinner1Activity extends Activity implements multispinnerListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
multispinner ms = (multispinner) findViewById(R.id.multi_spinner);
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
list.add("six");
list.add("seven");
list.add("eight");
list.add("nine");
list.add("ten");
ms.setItems(list, "select", this);
}
@Override
public void onItemschecked(boolean[] checked)
{
// TODO Auto-generated method stub
}
}
Göründüğünü, dinamik kapatıldığında içerik Resolverde üzerinde SQLite Veritabanı sorgunun üzerine içeriğini alır Spinner, bu metin yerine bir görüntü var doldurdu yarattı ve o değerleri dolduracaktır, onun seçimi bu çizgidir gösterip, sağ tarafta üstünü bir radioCheckbox koymak kılan onun müthiş basit :-)
spinnerFavorites = (SpinnerMultiSameClick) v.findViewById(R.id.guide_btn_favorites);
spinnerFavorites.setOnItemSelectedListener(this);
ContentResolver resolver = activity.getContentResolver();
String[] projection = new String[] { DataContract.Favorites.FAVORITES_ID, DataContract.Favorites.NAME };
Cursor cursor = resolver.query(DataContract.Favorites.CONTENT_URI, projection, null, null, DataContract.Favorites.FAVORITES_ID +" ASC");
if (cursor.getCount() > 0) {
// create an array to specify which fields we want to display
String[] from = new String[] { DataContract.Favorites.NAME, DataContract.Favorites.FAVORITES_ID };
// create an array of the display item we want to bind our data
// to
int[] to = new int[] { android.R.id.text1, android.R.id.text2 };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(activity, R.layout.ghost_text, cursor, from, to,
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
// get reference to our spinner
spinner.setAdapter(adapter);
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
} else {
// TODO: Maybe button to make new favList
spinnerFavorites.setVisiblity(View.GONE);
}
Şimdi, basit bir Spinner benziyor, /1 inci Listenizdeki öğe önceden seçilecektir.
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
orada birkaç diğer önceden tanımlanmış düzenleri oldukça iyi iş otelimizden olan
- simple_list_item_checked -> BackgroundColor
- simple_list_item_multiple_choice değiştirir -> yerine RadioButton
- simple_list_item_activated_1 veya 2'nin bir onay işareti gösterir - > CheckBox'lar checkMarks ile
Burada benim düzenim, işaretli veya işaretsiz bir Görüntü (seçili değil) gösterir, bu nedenle ben spinnerAdapter içinde R.layout.ghost_text belirtmişimdir.OnLtemSelectedListener Arabirimleri'ni gerektiren onItemSelecte burada. Ne yaparsa, bu, eğer bir spinerin başlamasıysa, bir boole ile devam eder. Eğer gerçek bir tıklama varsa, bu bilgiyi seçip standart bir eleman olarak belirlediyse, Tıklanan Elemanın Standart Seçilmiş Öğe'yi seçtiğimde SpinnerImage seçilmemişse, bir Kontrolör üzerinden başka bir UI Elementi güncellemek (ayrıca bir geri arama da olabilir). spinnerImage seçildi.
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (parent.getId() == R.id.guide_btn_favorites) {
if (!AbsintheViewControllerFactory.getGuideController().isFavoriteListInitialisation()) {
Cursor c = (Cursor) parent.getItemAtPosition(pos);
String favid = c.getString(c.getColumnIndexOrThrow(DataContract.Favorites.FAVORITES_ID));
String name = c.getString(c.getColumnIndexOrThrow(DataContract.Favorites.NAME));
Log.d(TAG, "Set Filter to FavListId: " + favid + " by its name: " + name);
if (favid.equalsIgnoreCase(GuideViewController.allChannelsFavoritesIdentifier)) {
spinnerFavorites.setSelected(false);
} else {
spinnerFavorites.setSelected(true);
}
AbsintheViewControllerFactory.getGuideController().setFavourites(favid);
guideInfoSelectedFavoriteList.setText(name);
} else {
AbsintheViewControllerFactory.getGuideController().setFavoriteListInitialisation(false);
guideInfoSelectedFavoriteList.setText(getActivity().getResources().getString(R.string.FILTER_FAVORITE_ALL_CHANNELS));
}
}
}
Orada, buna bir ipucu eklerseniz
üzerinde bulabilir miyim AndroidArsenal
üzerinde bulabilirsiniz, bir MultiSpinner uygulanan güzel görünüyor edilir: android: ipucu = "Seç ... "- 1. görüntüyü giriş tipi = "onay kutusu" olarak koymak mümkün mü?
- 2. Spinner iletişim kutusu metin dışına tıklayın
- 3. MVC3 Onay iletişimiyle birlikte Actionlink
- 4. Android: sayılarla birlikte çekilebilir kaynak. Mümkün mü?
- 5. Ekrandaki onay kutusu giriş kutusu
- 6. Özel_style.xml spinner öğesinde birden fazla yerçekimi değeri belirtmek mümkün mü?
- 7. jqGrid Arama Kutusu Sayfasında Kalmak Mümkün mü?
- 8. Neden onay kutusu tıklatıldığında onay kutusu yalnızca işaretlendiğinde yazılır?
- 9. HTML Giriş Onay kutusu,
- 10. Onay kutusu değeri
- 11. Onay kutusu, işaretliyse veya
- 12. kaçının onay kutusu
- 13. jstree disable onay kutusu
- 14. GWT onay iletişim kutusu
- 15. onay kutusu nasıl silinir
- 16. Onay kutusu durumu jQuery
- 17. WPF onay kutusu
- 18. onay kutusu - bildirimi değiştir
- 19. onay kutusu konuyu
- 20. Seçme EmberJs'de Onay Kutusu
- 21. jQuery onay kutusu işaretliyse
- 22. angular2 onay kutusu
- 23. angular2 onay kutusu formcontrol
- 24. C# içindeki onay kutusu listesinde nasıl bir metin kutusu eklenir?
- 25. Onay kutum işaretlenmediğinde null onay kutusu
- 26. EditText ve Spinner ile iletişim kutusu
- 27. Android listesi ve onay kutusu
- 28. al onay kutusu, birkaç girdi onay kutularını var onay kutusu adını
- 29. ListView Görüntüleyici onay kutusu durumu
- 30. NSIS yükleyicisi nsDialog onay kutusu
Teşekkürler! Çok fazla sorun gibi görünüyor, belki başka bir yaklaşım kullanacağım. –