Android Spinner показывает пустые значения - PullRequest
0 голосов
/ 04 октября 2011

Я новичок в Android.Мне нужно заполнить счетчик из базы данных SQLite.мой макет >> main.xml содержит

<Spinner 
            android:id="@+id/cmbLocations"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawSelectorOnTop="true"
            android:prompt="@string/location_prompt"
        />

<EditText android:id="@+id/text1" android:layout_width="300dp" android:layout_height="wrap_content"/>

У меня есть открытая функция, которая возвращает местоположения:

public static final String KEY_ROWID = "_id";
public static final String KEY_LOCATION = "location";

public Cursor GetLocations()
    {
        return db.query(DATABASE_TABLE, 
                new String[] 
                { 
                    KEY_ROWID, // "_id"
                    KEY_LOCATION // "location"
                }, null, null, null, null, null);
    }

Код, который заполняет счетчик:

    Spinner cmbLocations = (Spinner) findViewById(R.id.cmbLocations);
    DBAdapter db = new DBAdapter(this);
    db.open();

    Cursor cur = db.GetLocations();
    String[] from = new String[]{"_id","location"};
    int[] to = new int[]{R.id.text1};// I don't know that why text1 is required here

    startManagingCursor(cur);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, cur, from, to); 
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cmbLocations.setAdapter(adapter);
db.close();

Проблема, с которой я сталкиваюсь, заключается в том, что элементы управления вращением показывают ПУСТЫЕ местоположения.Например, если у меня есть два местоположения, Location1 и Location2.Вращатель покажет две пустые локации.Если у меня есть 3 локации, то счетчик покажет три ПУСТЫХ локации.

Заранее спасибо за вашу помощь.

Ответы [ 4 ]

2 голосов
/ 11 июня 2012

Чтобы R.id.text1 работал (вместо android.R.id.text1), в ваших ресурсах должен быть макет с TextView с этим id: R.id.text1.Например:

spin_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal" >
<TextView 
    android:id="@+id/field1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp" />
<TextView 
    android:id="@+id/field2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:textSize="20sp" />
</LinearLayout>

Теперь вы можете использовать в адаптере:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
    R.layout.spin_layout, 
    ur_cursor, 
    new String[] {"Field1_in_ur_cursor", "Field2_in_ur_cursor"}, 
    new int[] {R.id.field1, R.id.field2}, 0);

adapter.setDropDownViewResource(R.layout.spin_layout);

Связывает «Field1_in_ur_cursor» сR.id.field1 и «Field2_in_ur_cursor» для R.id.field2 для счетчика с макетом spin_layout.xml.

1 голос
/ 04 октября 2011

Попробуйте использовать:

String[] from = new String[]{"_id","location"};
    int[] to = new int[]{R.id.text1,R.id.text2};// I don't know that why text1 is required here

int[] to для размещения значений из курсора, который вы определили в. Например, вы выбираете _id и location, тогда вам нужно будет указать его назначение, здесь это может быть textview.

0 голосов
/ 26 апреля 2012

У меня есть два столбца, чтобы показать на счетчике, и когда: попытался использовать код, как;

String[] from = new String[]{"_id","location"}; 
int[] to = new int[]{R.id.text1,R.id.text2};

Это не сработало.когда я изменяю его на:

String[] from = new String[]{"_id","location"}; 
int[] to = new int[]{android.R.id.text1,android.R.id.text1};

Это сработало для меня.

0 голосов
/ 04 октября 2011

Если ваш из массива просто {"location"}

Посмотрите здесь:

Источник простого прядильщика

Это показывает, что на самом деле делает спиннер 'simple_spinner_item', и объясняет, каков ваш r.id.text1.

Вы передаете две колонки в Spinner, но хотите отобразить только одну.

Напечатайте несколько журналов вокруг вашего курсора, чтобы увидеть, действительно ли он содержит данные.

...